我正在尝试将代码编译为共享库(它在 Windows 上编译得很好,但我无法让它在 ubuntu 16.04 上编译)。
如果我尝试编译“在 Windows 上”,我会收到错误:
relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
所以为了编译链接到我的代码的静态库,我添加了 -fPIC 选项(默认情况下它似乎在 Windows 上,但不是在 linux 上,但我不确定):
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
在我使用 qmake 编译的代码中,我添加了:
QMAKE_CXXFLAGS += -fPIC
现在我得到这些错误:
itkGDCMImageIO.cxx:(.text+0xf9e) : undefined reference to « typeinfo for itk::MetaDataObjectBase »
itkGDCMImageIO.cxx:(.text+0xfb5) : undefined reference to « itk::MetaDataObject<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::GetMetaDataObjectValue() const »
ETC ...
如果我仅为我的代码添加 -fPIC 选项,而不是为编译它使用的静态库,我仍然会收到错误消息:
relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
即使添加了 qmake_cxxflags -fPIC。
我在做什么错?*(我将 Make 文件放在这里以防万一:https ://github.com/pdeman/mevislabFetalMRI/blob/master/Makefile.CHUVTools.Release )