我正在修改一個在Windows上運行的CMake文件,以在Linux中創建一個共享對象。CMake在Linux中編譯失敗
CMake文件生成一個makefile,當我在Linux上「make」時,它建立了foo庫的對象,並顯示了所有四個庫的鏈接。例如:
鏈接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
lib_foo3/lib_foo3_d.a:看不懂的符號:壞值
collect2:LD返回1個退出狀態
我已經嘗試了一些其他選項,但沒有喜悅。以下是我的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})
謝謝...
您使用了太多我們不知道的自定義宏(因爲它們在外部文件中).... – 2013-03-07 15:23:05