0

Windows で動作する CMake ファイルを変更して、Linux で共有オブジェクトを作成しています。

CMake ファイルは makefile を生成し、Linux で "make" を実行すると、foo ライブラリのオブジェクトがビルドされ、4 つのライブラリすべてのリンクが表示されます。例えば:

CXX スタティック ライブラリ lib_foo_d.a のリンク

そして最後の共有オブジェクト

CXX スタティック ライブラリ lib_scen_files_d.a のリンク

しかし、最後に表示されます

/usr/bin/ld: lib_foo3/lib_foo3_d.a(chap_alt_scence_defs.cpp.o):
共有オブジェクトを作成する場合、`.rodata' に対する再配置 R_X86_64_32 は使用できません。 -fPICで 再
コンパイルする

他のいくつかのオプションを試しましたが、喜びはありません。以下は私のCMakeLists.txtです。どんな助け/批判も私にとって有益です.

CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
CMAKE_POLICY( SET CMP0017 NEW ) 

PROJECT( disk_space_model )
INCLUDE( ../libs/helper_functions.cmake )
INCLUDE_THIRD_PARTY_SFC()
find_path_for_libs()

add_s_library( lib_foo1 )
add_s_library( lib_foo2) 
add_s_library( lib_foo3) 
add_s_library( lib_foo4) 

SET(    HEADER_FILES 
        stdafx.h
        INS_sensor_model.h
)

SET(    SOURCE_FILES
        Disk_space_model.cpp
)

SET(    RESOURCE_FILES 
        "Disk Space DLL.rc"
        resource.h
)

COMMON_SETUP()
set( LIB_FILES 
        lib_foo
        lib_foo1
        lib_foo3 
        lib_foo4 )

set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-all-symbols")
ADD_LIBRARY( disk_space_model SHARED ${SOURCE_FILES} ${HEADER_FILES} ${RESOURCE_FILES}  ${CMAKE_HELPER_FILES} )
SET_OUTPUT_DIRS( disk_space_model )
TARGET_LINK_LIBRARIES( disk_space_model ${LIB_FILES} )

ありがとう ...

4

2 に答える 2

1

リンカは、何が問題なのかを教えてくれます: オブジェクトは共有ライブラリで使用されていますが、 でコンパイルされていません-fPIC。何らかの方法でこのフラグを追加する必要があります。

CMake 2.8.9 以降を使用している場合はPOSITION_INDEPENDENT_CODE、問題のターゲット (静的ライブラリ) にプロパティを設定するだけです。

以前のバージョンの CMake では、フラグをターゲットのプロパティに直接追加する必要がありCOMPILE_FLAGSます (コンパイラの適切なスペルで、おそらく-fPIC.

于 2013-03-07T15:31:32.160 に答える
0

Linux で共有ライブラリをビルドするには、オブジェクト ファイルがリンクされているすべてのソースを再配置可能としてコンパイルする必要があります (リンカーが文句を言う -fPIC オプション)。静的ライブラリ lib_foo1 lib_foo2 lib_foo3 などを共有ライブラリにリンクしようとしましたが、失敗しました。可能な解決策:

  • 静的バージョン (.a) に加えて、各ライブラリ lib_foo1 lib_foo2 .. の共有バージョン (.so) をビルドします。
  • -fPIC パラメーターを使用して静的ライブラリーをビルドする
  • 静的ライブラリを共有ライブラリにリンクするのではなく、アプリにリンクします。静的ライブラリの関数が共有ライブラリで使用されている場合、これは不可能な場合があります。
于 2013-03-07T15:29:08.093 に答える