我的链接器参数列表变得太长了,此时我收到以下错误:
运行链接命令时出错:参数列表太长
我在我的应用程序中使用不同的第三方库(包括Qt,OpenCV,PointCloudLibrary,VTK,...),其中一些是我手动编译的,另一些是我在Mac OS X 10.7上通过自制软件安装的。
对于我的应用程序的实际构建设置,我使用的是CMake(2.8-9)。最近,我开始链接PCL(PointCloudLibrary 1.6),这让我头疼,现在报告错误。
我的CMake文件如下所示:
cmake_minimum_required(VERSION 2.6)
project(cmake_test)
add_definitions( -DBOOST_ALL_NO_LIB )
add_definitions( -DBOOST_ALL_DYN_LINK )
find_package(Boost COMPONENTS iostreams system filesystem regex thread date_time timer atomic locale graph exception REQUIRED)
if(Boost_FOUND)
add_definitions("-DHAS_BOOST")
endif()
find_package(PCL REQUIRED)
include_directories(
${Boost_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
)
link_directories(
${Boost_LIBRARY_DIRS}
${PCL_LIBRARY_DIRS}
)
add_definitions(
${PCL_DEFINITIONS}
)
add_executable(cmake_test cmake_test.cpp)
target_link_libraries(cmake_test
${Boost_LIBRARIES}
${PCL_COMMON_LIBRARIES}
${PCL_IO_LIBRARIES}
${PCL_FILTERS_LIBRARIES}
${PCL_FEATURES_LIBRARIES}
${PCL_GEOMETRY_LIBRARIES}
${PCL_SEGMENTATION_LIBRARIES}
${PCL_SURFACE_LIBRARIES}
${PCL_VISUALIZATION_LIBRARIES}
)
主要问题似乎是目标链接库列表现在包含对所有boost库的多个引用。实际上,对于每个${PCL_***_LIBRARIES}
,一遍又一遍地添加完整的${Boost_LIBRARIES}
列表。
我的问题是,如何从第三方库中删除作为依赖项出现的重复项,或者如果有人知道如何正确处理这些重复项。
请记住,我实际上正在使用此CMake中未列出的其他库(例如Qt,VTK),这些库会将更多项添加到目标链接列表中,最终使其对链接器来说太大了。
谢谢!
答案 0 :(得分:5)
答案 1 :(得分:0)
一种可能的解决方案是简单地创建一个包含所有必需${PCL_***_LIBRARIES}
的临时列表,并从该列表中删除所有${BOOST_LIBRARIES}
项:
[...]
foreach(i $ {Boost_LIBRARIES})
list(REMOVE_ITEM PCL_ALL_REQUIRED_LIBRARIES ${i})
endforeach(I)
[...]
我更愿意实际查找和删除重复项,因为我只会以${Boost_LIBRARIES}
这种方式删除重复项,但至少目前减少了列表大小。