C++ 如何制作不依赖于.so文件的可执行二进制文件
目前,我正在通过g++编译UING获得可执行文件:C++ 如何制作不依赖于.so文件的可执行二进制文件,c++,linux,C++,Linux,目前,我正在通过g++编译UING获得可执行文件: g++-4.8 test test.cpp -I /home/pottsie/Documents/Cpp-REST-SDK/casablanca/Release/include/ -lcasablanca -std=gnu++11 但是,当我在另一台机器上尝试该可执行文件时,会出现以下错误: error while loading shared libraries: libcasablanca.so: cannot open shared o
g++-4.8 test test.cpp -I /home/pottsie/Documents/Cpp-REST-SDK/casablanca/Release/include/ -lcasablanca -std=gnu++11
但是,当我在另一台机器上尝试该可执行文件时,会出现以下错误:
error while loading shared libraries: libcasablanca.so: cannot open shared object file: No such file or directory
是否可以创建一个不需要我在想要运行卡萨布兰卡的计算机上安装卡萨布兰卡的可执行文件?您可以添加
-static
以静态方式链接所需的库。当然,您需要将它们设置为.a
g++-4.8 test test.cpp -I /home/pottsie/Documents/Cpp-REST-SDK/casablanca/Release/include/ -static -lcasablanca -std=gnu++11
制作一个静态库而不是一个共享库(如果你拥有源代码)作为旁注:如果你只需要静态链接卡萨布兰卡,你可以去掉-l后缀-static将尝试静态链接所有内容(影响可移植性)@DavidKernin如果您删除
-l
前缀(我认为这是您的意思),则必须指定库的完整路径名。要仅静态链接卡萨布兰卡
,请将其包装在-Wl,-Bstatic-lcasablanca-Wl,-Bdynamic
中。(但您可能需要静态链接基本系统库以外的所有库。在这种情况下,您必须按照上述方式包装所有库,并使用选项-static libstdc++
)@potsiex5如果没有静态库,则无法静态链接。你从哪里得到图书馆的?通常,您应该同时拥有.a
和。因此
@JamesKanze我最喜欢您的解决方案,尽管静态链接所有系统库将极大地影响可移植性。如果这不成问题,那也没关系。@JamesKanze我是按照这里的构建说明得到这个库的:但它只生成.so文件。我想如果我不能得到.a文件,那么我就必须把它安装到另一台机器上。