C++ 编译C++;安装了两个不同Boost版本的系统上的代码
我试图在Ubuntu系统上编译,我安装了两个不同版本的C++ 编译C++;安装了两个不同Boost版本的系统上的代码,c++,boost,makefile,C++,Boost,Makefile,我试图在Ubuntu系统上编译,我安装了两个不同版本的boost:/usr/lib/中的1.46.1和/usr/local/lib/中的1.61.0 我已经说过1.61.0给了我一些编译问题,但是当我有更多的时间时,我宁愿不删除它来研究这个问题。我想我可以在makefile中引用1.46.1,使用-I”/usr/include/boost“获取1.46.1源代码,然后使用-L/usr/lib获取库。但仍然不起作用 我怀疑-lboost\u filesystem-lboost\u system-l
boost
:/usr/lib/
中的1.46.1和/usr/local/lib/
中的1.61.0
我已经说过1.61.0给了我一些编译问题,但是当我有更多的时间时,我宁愿不删除它来研究这个问题。我想我可以在makefile
中引用1.46.1,使用-I”/usr/include/boost“
获取1.46.1源代码,然后使用-L/usr/lib
获取库。但仍然不起作用
我怀疑-lboost\u filesystem-lboost\u system-lboost\u date\u time
的使用在某种程度上引用了1.61.0,即使与-L/usr/lib
一起使用(指向1.46.1)。但我一直无法找到有关链接器的此编译标志的信息
如何确保那些-l
引用到我想要的Boost
版本
下面是链接时makefile
正在执行的操作的示例(失败的部分):
您可以通过让链接器坦白它实际使用的库来证实或反驳您的怀疑。将选项
-Wl,--verbose
添加到g++
链接命令行(在makefile中,或者直接尝试)。然后,链接器将吐出与它试图链接的所有内容(包括您的boost库)匹配的确切文件
如果事实证明链接的是错误的版本,那么它还可以通过指定链接器在查找给定库时尝试的路径的确切顺序,为您提供一条线索,说明原因。如果您需要更改某些选项(例如,-L..
和-L..
选项的订购和/或内容),这将为您提供一些弹药
如果失败,您还可以使用选项
-l:/path/to/exact/libboost\u which.so
。这将强制使用给定版本的链接器。不过,我会在最后一次尝试。他们似乎指向了正确的版本,所以我的问题一定在其他地方。然而,这就是我想知道的一切。感谢这片wisdomIn CMake,你可以参考它
Invoking: Cygwin C++ Linker
g++ -O0 -g3 -Wall -Wextra -o"../bin/MY_APP.exe" ../bin/objs/main.o ../bin/objs/FileLoad.o ../bin/objs/DatabaseLoad.o -L /usr/lib/mysql -L /usr/lib -lmysqlclient -lboost_filesystem -lboost_system -lboost_date_time