我有一个项目涉及到多个常见库,以及Boost。在不同的Linux电脑上测试这个项目变得困难,因为各种版本的Linux都配备了不同版本的Boost。我希望避免在每台电脑上下载和编译相同版本的Boost。
是否有一种方法只将我的程序静态链接到Boost库,并使其他一切正常链接?我尝试了静态链接所有内容(-static),但这会导致其他问题(即lGL未找到)。是否有其他潜在的方法,我可以仅打包必要的动态库与我的程序(例如与可执行文件位于同一文件夹中),并以这种方式分发它?
静态链接所有内容时出现的链接错误:
是否有一种方法只将我的程序静态链接到Boost库,并使其他一切正常链接?我尝试了静态链接所有内容(-static),但这会导致其他问题(即lGL未找到)。是否有其他潜在的方法,我可以仅打包必要的动态库与我的程序(例如与可执行文件位于同一文件夹中),并以这种方式分发它?
静态链接所有内容时出现的链接错误:
g++ -static -o"acmserver" ./src/acmserver.o ./src/airplane.o ./src/bullet.o ./src/control.o ./src/detail.o ./src/game.o ./src/gamelog.o ./src/gamelogitem.o ./src/guns.o ./src/map.o ./src/missile.o ./src/missilepod.o ./src/object.o ./src/server.o -lboost_system -lboost_filesystem -lboost_thread -lboost_serialization -lboost_date_time -lpthread -lGLU -lGL
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
make: *** [acmserver] Error 1
修改(解决方案):
count0提到了我所需要的。在Eclipse中,我从“项目-》属性-》C / C ++构建-》设置-》GCC C ++链接器-》库-》库(-l)”中删除了所有Boost库(例如boost_system)。然后,在“项目-》属性-》C / C ++构建-》设置-》GCC C ++链接器-》其他对象”下添加了Boost .a文件(例如/usr/lib/libboost_system.a)。我还从链接器标志中删除了“-static”。这将产生一个可执行文件,其中所有boost库都是静态链接的,而不是动态链接的。