Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake将显式Boost库路径转换为-lboost_program_选项,但链接器发现错误的库 < >我使用CGEL编译一个C++程序,使用的是代码> Boo::我已经通过运行CMake强制CMake找到正确的头和库,如下所示 cmake \ -DBOOST_ROOT:PATHNAME=/path/to/correct/boost/ \ -DBOOST_LIBRARYDIR=/path/to/correct/boost/lib/ \ -DBOOST_INCLUDEDIR=/path/to/correct/boost/include/ \ -DBoost_NO_BOOST_CMAKE=BOOL:ON \ ._Boost_Cmake - Fatal编程技术网

CMake将显式Boost库路径转换为-lboost_program_选项,但链接器发现错误的库 < >我使用CGEL编译一个C++程序,使用的是代码> Boo::我已经通过运行CMake强制CMake找到正确的头和库,如下所示 cmake \ -DBOOST_ROOT:PATHNAME=/path/to/correct/boost/ \ -DBOOST_LIBRARYDIR=/path/to/correct/boost/lib/ \ -DBOOST_INCLUDEDIR=/path/to/correct/boost/include/ \ -DBoost_NO_BOOST_CMAKE=BOOL:ON \ .

CMake将显式Boost库路径转换为-lboost_program_选项,但链接器发现错误的库 < >我使用CGEL编译一个C++程序,使用的是代码> Boo::我已经通过运行CMake强制CMake找到正确的头和库,如下所示 cmake \ -DBOOST_ROOT:PATHNAME=/path/to/correct/boost/ \ -DBOOST_LIBRARYDIR=/path/to/correct/boost/lib/ \ -DBOOST_INCLUDEDIR=/path/to/correct/boost/include/ \ -DBoost_NO_BOOST_CMAKE=BOOL:ON \ .,boost,cmake,Boost,Cmake,CMake报告它找到了我希望它找到的boost库: -- Found the following Boost libraries: -- program_options -- Boost_INCLUDE_DIRS: /path/to/correct/boost/include -- Boost_LIBRARIES: /path/to/correct/boost/lib/libboost_program_options.so 然后我调用makeverbose=1-j 但是,CMake设置Ma

CMake报告它找到了我希望它找到的
boost
库:

-- Found the following Boost libraries:
--   program_options
-- Boost_INCLUDE_DIRS: /path/to/correct/boost/include
-- Boost_LIBRARIES: /path/to/correct/boost/lib/libboost_program_options.so
然后我调用
makeverbose=1-j

但是,CMake设置Makefile,以便

-L/path/to/correct/boost/lib/libboost_program_options.so
gcc
,它通过

-lboost_program_options
链接器随后无法找到正确的库,因为它将
。/lib64/
附加到目录:

attempt to open /path/to/correct/boost/lib/../lib64/libboost_program_options.so failed
gcc
然后尝试链接到错误版本的boost:

attempt to open /usr/lib/../lib64/libboost_program_options.so succeeded
-lboost_program_options (/usr/lib/../lib64/libboost_program_options.so)
这会导致
未定义的引用
错误,正如错误的库版本所期望的那样


如何强制
gcc
使用CMake找到的确切库路径(
Boost_库
)?是否有办法防止CMake将显式库路径转换为
-lboost\u program\u选项
?或者,有没有办法让链接器在路径中使用
lib/
而不是
lib64/
来查找正确的目录?

我遇到的问题与您使用Boost 1.65.1和CMake 3.9.3时遇到的问题完全相同。 但我很幸运,我有一个项目没有成功,另一个项目成功了,在同一台机器上使用相同的工具和库

不起作用的项目在顶级CMakeLists.txt的开头有这个

cmake_minimum_required(VERSION 3.0)
然而,好的项目已经成功了

cmake_minimum_required(VERSION 3.9.2)

这实际上改变了cmake的行为。

什么版本的cmake和Boost?cmake 3.9.4和Boost 1.63.0。好的,你的cmake已经足够新了。你的
目标链接库是什么样子的?它应该类似于
target\u link\u库(myTarget Boost::program\u options)
@oLen它看起来是这样的:
target\u link\u库(target${Boost\u libraries})
。前面是
find\u包(Boost必需组件程序选项)
include\u目录(${Boost\u include\u DIRS})
。我已经验证了
${Boost\u INCLUDE\u DIRS}
${Boost\u库}
是正确的。