5

これを解決する方法について何時間も検索しましたが、試したことはすべてうまくいきませんでした。特定のライブラリ (libPoco、libmysqlcpp、libmysqlclient、libssl) と静的にリンクしようとしています。

私はcmakeを使用しています.静的ライブラリを定義していますが、cmakeは単に動的ライブラリを検索します. ファイルシステムの静的アーカイブに必要なすべてのライブラリがあり、それらがどこにあるかを知っています。

set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH}
              /lib
              /usr/lib
              /usr/lib64
              /usr/local/lib
              /usr/local/lib64
              /usr/lib/x86_64-linux-gnu)

find_library(POCO_NET NAMES libPocoNet.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library(POCO_UTIL NAMES libPocoUtil.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library(POCO_XML NAMES libPocoXML.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library (MYSQL_CLIENT NAMES libmysqlclient.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library (MYSQL_CPP NAMES libmysqlpp.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library (LIBSSL NAMES libssl.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)

if (POCO_NET AND POCO_UTIL AND POCO_XML AND MYSQL_CLIENT AND MYSQL_CPP AND LIBSSL)
  message(STATUS ${POCO_NET})
  message(STATUS ${POCO_UTIL})
  message(STATUS ${POCO_XML})
  message(STATUS ${MYSQL_CLIENT})
  message(STATUS ${MYSQL_CPP})
  message(STATUS ${LIBSSL})
  target_link_libraries(icarus 
            PocoNet
            PocoUtil
            PocoXML
            mysqlpp
            mysqlclient
            ssl)
else ()
  message(FATAL_ERROR "FATAL ERROR: missing library")
endif (POCO_NET AND POCO_UTIL AND POCO_XML AND MYSQL_CLIENT AND MYSQL_CPP AND LIBSSL)

しかし、cmakeを実行すると、次のようになります。

-- /usr/local/lib/libPocoNet.so
-- /usr/local/lib/libPocoUtil.so
-- /usr/local/lib/libPocoXML.so
-- /usr/lib/x86_64-linux-gnu/libmysqlclient.so
-- /usr/lib/libmysqlpp.so
-- /usr/lib/libssl.so

また、コンパイルしようとすると、-static フラグを使用しているため、未定義の参照が発生します。ここで何が欠けていますか?cmake に動的ライブラリではなく静的ライブラリを検索させる方法はありますか? 私はこれについて間違った方向に進んでいますか?ありがとうございました。

4

1 に答える 1