我知道这些是编译C++应用程序所必需的,但我不知道如何构建我的应用程序,这样其他用户就不会需要它们了。我尝试使用-static标志来构建,但是当我从我的路径中移除混合\bin\和msys2 2\usr\bin\时,或者当我没有C++编译器的朋友尝试运行它时,它仍然不能工作。为了记录在案,当我请求朋友来运行这个项目时,我确实包括了该项目的每个库。
这是我的制作文件:
rtx.exe: base.o objects.o rtx.o
g++ -O3 base.o objects.o rtx.o -o rtx -pthread -Lsrc\lib -lsfml-graphics -lsfml-window -lsfml-system -ljsoncpp -static -static-libgcc -static-libstdc++
rtx.o: rtx.cpp
g++ -Isrc\include -O3 -c rtx.cpp -static -static-libgcc -static-libstdc++
objects.o: objects.cpp objects.hpp
g++ -Isrc\include -O3 -c objects.cpp -static -static-libgcc -static-libstdc++
base.o: base.cpp base.hpp
g++ -Isrc\include -O3 -c base.cpp -static -static-libgcc -static-libstdc++
clean:
-rm *.o $(objects) rtx.exe下面是其中一个流行op I(以及我们的C++编译器的朋友):

有4个弹出窗口,其中2个是这个,另一个是libstdc++-6.dll。
我尝试了很多事情,包括使用ar ru命令将objects.o和base.o编译到库中,但是它提供了相同的弹出。
我的猜测是,我所使用的库之一,无论是jsonCpp还是SFML,都不是静态构建的,但我找不到任何关于如何修复它的信息。
发布于 2022-07-20 17:27:26
因此,按照HolyBlackCat的建议,我完全重新安装了MSYS2,并使用mingw下载了SFML和jsonCpp,经过一些研究和尝试,我最终得到了这个makeFile:
rtx.exe: base.o objects.o rtx.o
g++ -O3 base.o objects.o rtx.o -o rtx -pthread -lsfml-graphics-s -lsfml-window-s -lsfml-system-s -lopengl32 -lwinmm -lgdi32 -ljsoncpp -static
rtx.o: rtx.cpp
g++ -Isrc\include -O3 -c rtx.cpp -DSFML_STATIC -static
objects.o: objects.cpp objects.hpp
g++ -Isrc\include -O3 -c objects.cpp -DSFML_STATIC -static
base.o: base.cpp base.hpp
g++ -Isrc\include -O3 -c base.cpp -DSFML_STATIC -static
clean:
-rm *.o $(objects) rtx.exe现在,它确实是一个静态的构建。
发布于 2022-07-19 07:37:55
如果您想摆脱共享运行时库,您必须确保所有依赖项都静态地链接了运行时。
默认情况下,SFML不是用静态运行时库构建的,因此您肯定必须用SFML_USE_STATIC_STD_LIBS设置在CMake中重新构建SFML。同样,对于jsoncpp我也是这样认为的。
https://stackoverflow.com/questions/72943913
复制相似问题