4

リンカの引数リストが長くなりすぎて、この時点で次のエラーが表示されます。

リンク コマンドの実行中にエラーが発生しました: 引数リストが長すぎます

アプリケーションでさまざまなサードパーティ ライブラリ (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}
)

主な問題は、ターゲット リンク ライブラリ リストにすべてのブースト ライブラリへの複数の参照が含まれるようになったことです。実際、すべて${PCL_***_LIBRARIES}の完全な${Boost_LIBRARIES}リストが何度も追加されています。

私の質問は、サードパーティのライブラリから依存関係として入ってくるような重複をどのように削除できるか、またはこれを適切に処理する方法を誰かが知っているかどうかです。

この CMake にリストされていない追加のライブラリ (Qt、VTK など) を実際に使用していることに注意してください。これにより、ターゲット リンク リストにさらに項目が追加され、最終的にリンカが処理するには大きすぎます。

ありがとうございました!

4

2 に答える 2

0

考えられる解決策の 1 つは、必要なすべての項目を含む一時的なリストを作成し、そのリストからすべての項目${PCL_***_LIBRARIES}を削除することです。${BOOST_LIBRARIES}

[...]

foreach(i ${Boost_LIBRARIES})

list(REMOVE_ITEM PCL_ALL_REQUIRED_LIBRARIES ${i})

endforeach(i)

[...]

この方法でのみ重複を削除するので、実際に重複を見つけて削除したいと思います${Boost_LIBRARIES}が、少なくともリストのサイズは今のところ縮小されています。

于 2013-08-06T14:47:06.967 に答える