SDL2_image ライブラリを使用することになっているプロジェクト用の CMake ベースのビルド システムを作成しようとしています。プロジェクトをビルドするためにライブラリをシステムにインストールすることをユーザーに強制したくないので、外部プロジェクトとしてソース コードから依存関係 (freetype、SDL2、および SDL2_image) をダウンロードしてビルドする CMake の機能を利用しました。
freetype と SDL2 (どちらもそのままでCMakeLists.txtファイルが含まれています) ではすべて問題ありませんが、SDL2_image で機能させる方法については考えが尽きました。CMake の外部プロジェクトは、私がさまざまなバリアントで使用したカスタム構成とビルド設定をサポートしていますが、成功しませんでした。
CMake ファイル自体はここにありますが、問題のある部分は次のとおりです。
# SDL_image library
ExternalProject_Add(sdl2_image_project
URL https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.0.tar.gz
DEPENDS sdl2_project
PREFIX ${LIBS_DIR}/SDL2_image
CONFIGURE_COMMAND LDFLAGS=-L${SDL2_BIN} CFLAGS=-I${SDL2_SRC}/include SDL2_CONFIG=${SDL2_BIN}/sdl2-config <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --enable-shared=no
BUILD_COMMAND make
INSTALL_COMMAND ""
)
sdl2_image_project のビルド中にエラーが発生します。いくつかの些細な調査により、 libdlの一部への未定義の参照によってエラーが生成されることが発見されました。穴のエラーのごく一部を次に示します。
libtool: link: gcc -I/home/snikitin/_src/img_glypher/libs/SDL2/src/sdl2_project/include -I/usr/local/include/SDL2 -D_REENTRANT -o showimage showimage.o -Wl,-rpath -Wl,/usr/local/lib -pthread -L/home/snikitin/_src/img_glypher/libs/SDL2/src/sdl2_project-build ./.libs/libSDL2_image.a -L/usr/local/lib -lSDL2 -pthread
/home/snikitin/_src/img_glypher/libs/SDL2/src/sdl2_project-build/libSDL2.a(SDL_dynapi.c.o): In function `get_sdlapi_entry':
/home/snikitin/_src/img_glypher/libs/SDL2/src/sdl2_project/src/dynapi/SDL_dynapi.c:227: undefined reference to `dlopen'
この問題は、リンカーが静的なlibSDL2.aにリンクしているときに SDL2_image ライブラリの共有バージョンを作成しようとするために発生すると思います。問題は、これが正しければ、SDL2 の構築段階でそれ自体の静的バージョンと共有バージョンの両方が作成されるため、リンカが代わりにlibSDL2-2.0.soを使用すると仮定することです (共有ライブラリは実際には必要ありません - 静的ライブラリだけですが、--enable-shared=noSDL2_image構成スクリプトに渡す以外に、ビルドシステムがそれを作成しようとするのを防ぐ方法がわかりません。この場合は役に立ちません)。
多くのグーグル検索の後、問題の考えられる原因は、sdl2-config(SDL_image のビルド中にコンパイラのフラグを取得するために呼び出される) が間違った引数で呼び出され、他のすべてを混乱させる間違った cflags を生成することであることがわかりました。sdl2_configしかし、それが事実であるかどうかはわかりません。また、CMake からの呼び出しに影響を与える方法もわかりません (configure --helpこの状況に役立つオプションを明らかにしていないようです)。
何らかの形で問題がある場合は、Ubuntu 14.04 x64 を実行しています。アドバイスをいただければ幸いです。