6

プロジェクトに1つの実行可能ファイルと1つの共有ライブラリがあります。共有ライブラリはブーストライブラリを使用します。実行可能ファイルは、共有ライブラリのolnyを使用します。

tilenet/             <-- Project
   ttest/            <-- Test (executable)
      CMakeLists.txt
   tilenet/          <-- The shared library
      CMakeLists.txt
   CMakeLists.txt    <-- Root CMake-file

ルートCmakeファイル:

cmake_minimum_required(VERSION 2.6) 

project(tilenet)

set(Boost_USE_STATIC_LIBS        OFF)  # I've already tried ON
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)


find_package(Boost 1.49 COMPONENTS system filesystem REQUIRED)

include_directories(${Boost_INCLUDE_DIRS})

add_subdirectory(test)
add_subdirectory(tilenet)

ttest / CMakeLists.txt

add_executable(ttest test.cpp)
target_link_libraries(ttest tilenet ${BOOST_LIBRARIES})

tilenet / CMakeLists.txt

include_directories("include")
set(tilenet_src "src/tilenet.cpp" ...)

add_library(tilenet SHARED ${tilenet_src})
target_link_libraries(tilenet 
            ${SFML_LIBRARIES}
            ${BOOST_LIBRARIES}
            )

(私はいくつかの重要でないものをカットしました)

Windowsでは正常に動作しますが(ただし、CMakeなしでVisuelStudioを使用しています)、Linuxでは次のリンクエラーが発生します。

../../lib/libtilenet.so: undefined reference to `boost::filesystem3::path_traits::convert(wchar_t const*, wchar_t const*, std::string&, std::codecvt<wchar_t, char, __mbstate_t> const&)'
../../lib/libtilenet.so: undefined reference to `boost::filesystem3::path::operator/=(boost::filesystem3::path const&)'
../../lib/libtilenet.so: undefined reference to `boost::system::system_category()'
../../lib/libtilenet.so: undefined reference to `boost::filesystem3::path::wchar_t_codecvt_facet()'
../../lib/libtilenet.so: undefined reference to `boost::system::generic_category()'
../../lib/libtilenet.so: undefined reference to `boost::filesystem3::path_traits::convert(char const*, char const*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&, std::codecvt<wchar_t, char, __mbstate_t> const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [../bin/ttest] Error 1
make[1]: *** [test/CMakeFiles/ttest.dir/all] Error 2
make: *** [all] Error 2

与えられたオプションでたくさんの組み合わせを試しましたが、リンクできませんでした。私がどこでミスをしたか知っていますか?CMakeを真剣に使ったのはこれが初めてです:)

4

1 に答える 1

8

CMake変数では大文字と小文字が区別され、FindBoostモジュールはブーストライブラリを。Boost_LIBRARIESではなく、という名前の変数に設定しますBOOST_LIBRARIES

2回の呼び出しでに置き換える${BOOST_LIBRARIES}と、正しく機能するはずです。${Boost_LIBRARIES}target_link_libraries

FindBoostモジュールの詳細については、次を実行してください。

cmake --help-module FindBoost
于 2012-05-14T16:11:48.687 に答える