Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在命令提示符下编译C代码_C_Windows_Dll_Static Linking - Fatal编程技术网

在命令提示符下编译C代码

在命令提示符下编译C代码,c,windows,dll,static-linking,C,Windows,Dll,Static Linking,我正在使用MinGW创建一个dll,一切正常。然而,当我在项目中使用dll时,它需要其他dll才能工作。如何将其他dll嵌入到我的dll中。我知道在编译时需要*.lib文件,但如何静态编译。我所做的是 gcc -shared -static -o filename.dll somefiles.c .... -Lc:/directoryOfLibrary -llibfile 此命令成功创建了filename.dll,如果依赖的dll位于同一文件夹中,我可以在程序中使用它 其次,我正在使用一些gt

我正在使用MinGW创建一个dll,一切正常。然而,当我在项目中使用dll时,它需要其他dll才能工作。如何将其他dll嵌入到我的dll中。我知道在编译时需要*.lib文件,但如何静态编译。我所做的是

gcc -shared -static -o filename.dll somefiles.c .... -Lc:/directoryOfLibrary -llibfile
此命令成功创建了filename.dll,如果依赖的dll位于同一文件夹中,我可以在程序中使用它


其次,我正在使用一些gtk库,比如glib,我的dll需要libglib-2.0.dll,但在gtk的lib文件夹中有glib-2.0.lib和libglib-2.0.dll.a。静态编译要使用哪一个?

您不能将DLL嵌入到另一个DLL中。您需要源文件来创建单个DLL,但除非您有充分的理由,否则不应该这样做DLL的要点是将它们分开,这样每个文件都可以单独更新并在运行时加载。为什么要将它们全部嵌入到一个文件中?旁注:由于Windows的设计非常智能,所有软件都有自己所需的DLL副本(因此有大量重复的DLL)是很常见的。如果您还包括应用程序运行和随软件提供所需的所有数百个DLL,这是正常的。我只想将它们合并到一个DLL文件中,而不是使用多个DLL文件,因为它们只在一个程序中使用。好的,DLL不能嵌入,但每个DLL文件都有.lib文件,我认为这些.lib文件可以静态链接到主DLL,这样就有一个单独的DLL可以独立工作。此外,如果您计划在没有源代码的情况下分发DLL,Glib和Gtk都不允许这样做,因为它们是根据LGPL许可的