在Visual Studio中,有编译标志/ MD和/ MT,可让您选择所需的C运行时库类型.
我理解实现方面的差异,但我仍然不确定使用哪一个.有哪些优点/缺点?
我听说过/ MD的一个优点是,这允许有人更新运行时(比如修补安全问题),我的应用程序将从此更新中受益.虽然对我而言,这几乎看起来像一个非特征:我不希望人们改变我的运行时而不允许我测试新版本!
我很好奇的一些事情:
我有一个Visual Studio 12项目; 用C++编写的源代码; 这是一个OpenCV项目.我想将我编译的程序提供给其他人,但是,在其他PC上,我收到有关丢失一些dll的错误消息.我的程序使用了许多OpenCV(也许,不仅仅是)dll.我该如何解决这个问题? 也许在VS 12中可以选择在.exe中包含所有dll? 这是一个非常类似的问题没有正确答案: 在visual studio c ++ 2008中包含dll
当编译C程序时,它按照预处理器,编译器,汇编器,链接器的顺序进行.其中一项主要任务linker是为您的程序提供库函数代码.链接器可以通过静态或动态两种方式链接它们.
stdio.h仅包含声明,其中不存在任何定义.我们只stdio.h在程序中包含关于返回类型和函数名称的编译器eg(printf(),scanf(),getc(),putc()...)..
然后怎么printf()和scanf()链接?
总"C"库是否与程序动态链接?
#include"stdio.h"
int main(){int n;
printf("输入一个整数\n"); scanf("%d",&n);
if(n%2 == 0)printf("Even \n"); else printf("Odd \n");
返回0; }
我正在尝试编译一个静态库(让我们称之为library.a).该库消耗标准库的资源.有一些方法可以使库静态链接标准库.
我证明了这样的事情:
g++ -c library -static-libstdc++ -o library.o
ar rcs library.o library.a
Run Code Online (Sandbox Code Playgroud)
但如果我这样做,就没有标准库的链接.
然后我证明了这一点:
g++ library -static-stdlib -o library.o
ar rcs library.o library.a
Run Code Online (Sandbox Code Playgroud)
但是请我添加一个主要功能.
是否有可能通过静态链接标准库(std :: string,std :: vector,std :: cin等...)来创建静态库.
谢谢 :)
我对 VS code 完全是个新手,而且我只用 C++ 编码了大约一个月。我尝试了这个简单的程序来确保设置正确:
#include <iostream>
#include <vector>
using namespace std;
int main() {
cout << "Hello world" << endl;
vector<int> v;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行可执行文件时没有显示任何内容。删除向量声明会使程序正常运行。
我确实发现它在声明字符串时遇到了类似的问题,并且解决方案(使用 -static-libstdc++ 进行静态链接)对我有用,尽管提供解决方案的作者也不完全确定它为什么有效。
然而,由于我是菜鸟,所以我不太明白为什么静态链接解决了我的问题,即使在读完这篇文章之后,我也担心提到的一些缺点(如果绝对必须的话,建议仅静态链接,因为缺点超过优势),所以我想知道除了静态链接之外是否还有其他解决方案。
编辑:澄清 - 程序的输出现在正常显示在终端中,但在输出窗口中,仍然出现相同的退出代码。