Dll 如何在g++;?

Dll 如何在g++;?,dll,g++,static-linking,Dll,G++,Static Linking,正如标题中提到的,这是一个真正的初学者问题 我意识到,经过几年的CS课程和项目等,我从来没有真正需要导出一个其他人不需要手动编译源代码就可以运行的可执行文件(这是大多数/所有教授/助教所做的,因为他们无论如何都想看你的源代码) 所以我的问题基本上是这样的: 当我编译一些基本的C++代码(例如“hello World”代码)时,我总是需要某种外部的DLL来运行它。 VisualStudio需要.NET框架 Cygwin需要Cygwin.dll MinGW需要libgcc_s_dw2-1.dll或

正如标题中提到的,这是一个真正的初学者问题

我意识到,经过几年的CS课程和项目等,我从来没有真正需要导出一个其他人不需要手动编译源代码就可以运行的可执行文件(这是大多数/所有教授/助教所做的,因为他们无论如何都想看你的源代码)

所以我的问题基本上是这样的:

当我编译一些基本的C++代码(例如“hello World”代码)时,我总是需要某种外部的DLL来运行它。
  • VisualStudio需要.NET框架
  • Cygwin需要Cygwin.dll
  • MinGW需要libgcc_s_dw2-1.dll或类似的东西
那么,我如何简单地编译一个可执行文件,使我(或我把文件交给的人)只需双击它就可以运行它呢?我猜我可以在g++上使用一些奇特的命令行标志来静态链接DLL;我以前根本不需要这样做

正如我说过的两次,这是一个超级初学者的问题,但我找不到(无论如何,很容易)这个问题的答案,不管是StackOverflow还是其他任何地方。我认为,很大程度上是因为搜索词在其他问题的描述中非常常用

无论如何,我们非常感谢您的帮助

编辑:

我说的是“你好世界”节目。e、 g:

HelloWorld.cpp:

#include <iostream>
using namespace std;

int main()
{
    cout << "Hello World!" << endl;

    return 0;
}
#包括
使用名称空间std;
int main()
{

如果您已经获得了需要链接的静态库(.lib或.a),请在链接应用程序时将它们与对象文件放在一起,如

g++foo.o libfoo.a-o foo


我认为您真正的问题是如何定位应用程序需要哪些静态lib以及如何获取它们,也许您应该在这里发布代码,让我们知道您需要链接到哪个库。

但是,您通常应该避免静态链接。。通常Linux机器上的几乎所有实用程序都是动态链接的nked:您可以使用
文件
ldd
来了解可执行文件是否是静态链接的。在我的Debian/Sid系统上
/usr/bin/
包含7303个文件,但只有一个是静态链接的(它是
/usr/bin/rar

使用动态链接更好,因为它使用更少的磁盘空间,最重要的是动态库被更新,这有利于所有动态链接它们的可执行文件

如果您关心依赖关系,请使用软件包管理器(或将程序作为软件包分发)。

以下是如何: 简单地说,您指定将所有标准内容链接到可执行文件中

g++ -o c:\prog.exe c:\HelloWorld.cpp -static-libgcc -static-libstdc++
希望能有帮助