0

フレームワークをダウンロードし、それを .so としてバンドルして、他のプロジェクトに含めることにしました。ただし、フレームワークはいくつかの静的ライブラリに依存しています。すべてのリンカーがこれをサポートしているわけではないため、静的ライブラリを .so にリンクできないことを複数の投稿で見ました。

そこで、静的ライブラリをexeにリンクし、.soもリンクしようとしました。参照が未定義であるというエラーが表示されます (静的ライブラリからのものへの参照)。

例えば:

add_library(framework3 SHARED ${MY_SOURCES}) #produces libframework3.so

次にexeプロジェクトで:

add_executable(renderer.exe ${MY_SOURCES})
target_link_libraries(tsx_renderer.exe framework3)
target_link_libraries (renderer.exe ${PROJECT_SOURCE_DIR}/Framework/Libs/libjpeg.lib)
target_link_libraries (renderer.exe ${PROJECT_SOURCE_DIR}/Framework/Libs/libpng.lib)

私が得るエラーメッセージは次のとおりです。

/home/joe/ClionProjects/proj/build/libframework3.so: undefined reference to `jpeg_destroy_compress'
/home/joe/ClionProjects/proj/build/libframework3.so: undefined reference to `png_set_write_fn'
4

2 に答える 2

1

target_link_librariesを使用すると、スタティック ライブラリが exe に正しくリンクされていないようです。代わりにIMPORTEDプロパティでadd_libraryを使用しました。

add_library(TheStaticLibrary STATIC IMPORTED)
set_property(TARGET TheStaticLibrary PROPERTY IMPORTED_LOCATION "THE_LIBRARY_PATH")

それが役に立てば幸い...

于 2014-11-17T16:06:52.223 に答える