怎么办libwinpthread-1.dll文件的静态链接在MinGW的?(how to do st

2019-07-04 17:48发布

我用MinGW的从这里: http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.7.2/32-bit/threads-posix/sjlj/x32-4.7.2-release-posix-sjlj-rev2.7z/download

而且我已经成功地设法静态链接libstdc++-6.dlllibgcc_s_sjlj-1.dll使用-static-libgcc -static-libstdc++参数,但我无法找到,做具有相同的命令libwinpthread-1.dll

Answer 1:

你或许应该检查命令行选项文档GCC。

这些没有“-static-东西”命令,唯一的标准库(libgcc中和libstdc ++)可以设置为静态的,其中一个命令链接。 对于其它库,你先切换到与“-static”,然后静态链接库列表与单独的命令,包括,即“-lpthread”。



Answer 2:

如果您的工具链包括静态winpthreads,增加选择

-static

会拉入它可以所有库的静态版本。

另外,您也可以从工具链目录删除libwinpthread.dll.a和DLL本身。 这可能乱用的libstdc ++链接程序和libgcc中的DLL了,所以要小心。

第三个选择是使用-Wl,-Bdynamic-Wl,-Bstatic来选择要在链接的版本(这是什么-static内部确实LD时被调用)。 一个例子:

gcc -o someexec someobject.o -Wl,-Bdynamic -lsomelibIwantshared -Wl,-Bstatic -lsomelibIwantstatic

如果你运行你的链接命令-v增加,你应该看到出现在LD / collect2调用这些选项时使用-static-libgcc-static-libstdc++



Answer 3:

试试这个:

-static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic

注意-lstdc++之前-lpthread 。 它为我工作。

确保添加到您的尽头g++命令行。



Answer 4:

静态链接winpthread即使线程没有在程序中使用,通过-Bstatic--whole-archive参数的链接:

g++ -o hello.exe hello.cpp -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive

请注意以下几点:

  • “整档案”选项应随即被禁用。
  • 你并不需要,如果你的程序实际上从库使用符号来做到这一点的黑客(即您使用<thread>从C ++ 11),在这种情况下,当你静态链接它的库将不会下降。
  • 这个技巧是为MinGW的-W64,修复libwinpthread-1.DLL依赖。


Answer 5:

对于任何人在CMake的工作,该解决方案在您的CMakeLists.txt文件很容易实现如下...

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static")


Answer 6:

显然,CMake的不与如何一些奇怪的东西, -Wl编译器标志进行处理,使-Wl,-Bstatic -lstdc++ -lwinpthread -Wl,-Bdynamic解决方案不起作用,只有两个其他选项看似左:坏编译器标志-static的和丑陋的编译器标志-Wl,--whole-archive

与此同时,实际工作中CMake的,但良好的选择似乎相当无证,是直接使用连接标志。 因此,在CMake的,这似乎是静态链接到所有的MinGW-W64 C ++依赖的最佳方式:

target_link_libraries (MyVeryAwesomeApp -static gcc stdc++ winpthread -dynamic)

应当指出的是,即使没有一个明确的库下面-dynamic ,它仍然应该按顺序应用,保证了标准,隐含链接库得到正确链接。



Answer 7:

只需添加-static到您的CFLAGS

例如: ./configure CFLAGS="-static"

这都将静态库链接到你的可执行文件。



Answer 8:

我有同样的问题。 我使用的代码::块,而我通过添加链接commmands额外的行取得了成功:

-lpthread -L libwinpthread-1.dll

这个命令应该加入哪个位置执行其他命令的链接,如:

-static-libgcc
-static-libstdc++

执行此命令时,我收到没有编译错误或警告。 第一指令,-lpthread,指定的头文件,和后指令,-L,用于链接一个特定的文件。

我使用gcc版本4.8.1。 这个新版本包含了* to_string * bug修复,比如我需要的。



文章来源: how to do static linking of libwinpthread-1.dll in mingw?