可能重复:
如何从.key和.crt文件获取.pem文件?
如何将.crt转换为.pem?
我正面临着这个.dll库缺失错误:
此程序无法启动,因为缺少api-ms-win-crt-runtime-l1-1-0.dll.尝试重新安装.
当我尝试打开Microsoft Office文件时.
我该如何解决?
在Visual Studio中,有编译标志/ MD和/ MT,可让您选择所需的C运行时库类型.
我理解实现方面的差异,但我仍然不确定使用哪一个.有哪些优点/缺点?
我听说过/ MD的一个优点是,这允许有人更新运行时(比如修补安全问题),我的应用程序将从此更新中受益.虽然对我而言,这几乎看起来像一个非特征:我不希望人们改变我的运行时而不允许我测试新版本!
我很好奇的一些事情:
最近我一直在尝试调试一些低级工作,我找不到crt0.S
编译器(avr-gcc),但我确实找到了crt1.S
(和相应的.o
文件一样).
这两个文件有什么区别?是crt1
完全不同的东西还是什么?它们似乎都与'bootstrapping'(设置stack frame
等)有关,但为什么区别呢?
有人可以解释一下它们之间的区别吗?互联网查询让我很困惑。
我用的是VS2019。
该fopen
函数返回一个指向FILE
结构的指针,该结构应被视为不透明值,而不处理其内容或含义.
在Windows上,C运行时是Windows API的包装器,该fopen
函数依赖于该CreateFile
函数.该CreateFile
函数返回a HANDLE
,由其他Windows API使用.
现在,我需要使用使用库的Windows API的内心深处fopen
和FILE*
.那么:有没有办法HANDLE
从FILE
结构中获得?由于这是特定于编译器的,我的意思是在MSVC运行时库上.
据我所知,这将是一个丑陋的,不可移植的黑客,如果微软改变内部格式,可能会破坏FILE
......但我正在开发一个封闭的系统(即在Windows CE嵌入式系统上)并重构库将是困难和耗时的.
我有一个共享库,由我无法控制的另一个应用程序使用,需要*.so对象.我的库使用sqlite3,它需要与它静态链接(我绝对需要一个自包含的二进制文件).
当我尝试编译和链接我的库时:
-fpic -flto -pthread -m64
-flto -static -shared
Run Code Online (Sandbox Code Playgroud)
我最终得到以下错误:
/usr/bin/ld: /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
什么是与-fPIC相关的重新编译?我的代码还是CRT?
我已经尝试用-fPIC编译我的对象,结果相同.
谢谢.
编辑:
这个问题似乎与SQLite3无关.
我写了一个简单的单行无用库,它编译和链接如下:
g++ -c -fPIC -o bar.o bar.cpp
g++ -shared -o bar.so bar.o
Run Code Online (Sandbox Code Playgroud)
但不是这样的:
g++ -c -fPIC -o bar.o bar.cpp
g++ -static -shared -o bar.so bar.o
Run Code Online (Sandbox Code Playgroud)
问题似乎与CRT(crtbeginT.o)有关.我应该重新编译GCC - 用pic还是其他什么?
使用多个DLL和QT的C++程序应该配备malloc替换(如tcmalloc),以解决可以验证由Windows malloc引起的性能问题.使用linux,没有问题,但是对于Windows,有几种方法,我发现它们都没有吸引力:
1.将新的malloc放入lib并确保首先链接它(其他SO问题)
这样做的缺点是,例如strdup仍将使用旧的malloc,而free可能会使程序崩溃.
2.使用lib.exe(Chrome)从静态libcrt库中删除malloc
对铬/铬进行测试/使用(?),但缺点是它只能与静态连接crt一起使用.如果一个系统库与msvcrt动态链接,则静态链接存在问题,堆分配/释放中可能存在不匹配.如果我理解正确,tcmalloc可以动态链接,以便所有自编译的dll都有一个公共堆(这很好).
3.补丁crt源代码(firefox)
Firefox的jemalloc显然修补了Windows CRT源代码并构建了一个新的crt.这又有上面的静态/动态链接问题.
人们可以考虑使用它来生成动态MSVCRT,但我认为这是不可能的,因为许可证禁止提供具有相同名称的修补MSVCRT.
4.在运行时动态修补加载的CRT
一些商业内存分配器可以做这样的魔术.tcmalloc也可以,但这看起来相当丑陋.它有一些问题,但它们已被修复.目前,使用tcmalloc它不能在64位窗口下工作.
有更好的方法吗?任何意见?
我正在研究用于Windows
平台的遗留代码.当我编译代码时VS2013
,它会发出以下警告:
错误C4996:'
fopen
':此函数或变量可能不安全.考虑fopen_s
改用.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详情请参见在线帮助."
它也会给出一个熟悉的警告sprintf
.sprintf_s
由于缓冲区溢出,我理解比sprintf更安全.
但是如何使fopen_s更安全fopen
,因为fopen
不接受缓冲区就没有缓冲区溢出的可能性.任何人都可以提供一个fopen
不安全的案件,fopen_s
是否安全?
大家好,
我有一个.crt文件,我需要获取相关的密钥库文件.怎么办?
是keytool
有帮助的呢?
谢谢.