1

CMake を使用して libfoo.a から liboo.so を作成したいと思います。

これまでのところ、

include_directories(third-party/includes)
find_library(${thirdparty_LIBRARIES} foo PATHS third-party/lib)
add_library(boo SHARED empty.cpp)
target_link_libraries(boo ${thirdparty_LIBRARIES})
add_executable(runBoo main.cpp)
target_link_libraries(runBoo boo)

ここで、main は libfoo.so から関数を呼び出します。しかし、エラーを引き起こします:

main.cpp:(.text+0x26): undefined reference to `Foo::Foo()'
main.cpp:(.text+0x50): undefined reference to `Foo::sayHello(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'

empty.cpp はそれらを使用しないため、シンボルが追加されていないと推測していますが、それが問題であり、それを克服する方法がわかりません。

私はCMakeを見てきました:サブプロジェクトのすべての静的ライブラリから単一の共有ライブラリを作成する方法は? 、しかし、今のところcmakeの下位バージョンに固執したいと思います。

gccで静的ライブラリを動的ライブラリにリンクする方法も見ましたが、それを機能させることができず、とにかくCMakeを使用しています。

4

2 に答える 2

0

ばかげた間違いがありました。修正されたコードは次のとおりです。

   include_directories(third-party/includes)

   find_library(thirdparty_LIBRARIES foo PATHS third-party/lib) //remove the ${}!

   add_library(boo SHARED empty.cpp)
   target_link_libraries(boo ${thirdparty_LIBRARIES})
   add_executable(runBoo main.cpp)
   target_link_libraries(runBoo boo)
于 2013-04-09T16:34:51.093 に答える