2015-07-20 73 views
4

我試圖編譯Apache Qpid Solaris機器上,但它failes在連接過程中:的Solaris LD:致命的:無法識別的選項「 - 」

Scanning dependencies of target qpidtypes 
[ 0%] Building CXX object src/CMakeFiles/qpidtypes.dir/qpid/types/Exception.cpp.o 
[ 0%] Building CXX object src/CMakeFiles/qpidtypes.dir/qpid/types/Uuid.cpp.o 
[ 0%] Building CXX object src/CMakeFiles/qpidtypes.dir/qpid/types/Variant.cpp.o 
Linking CXX shared library libqpidtypes.so 
ld: fatal: unrecognized option '--' 
ld: fatal: use the -z help option for usage information 
*** Error code 1 
The following command caused the error: 
cd /export/home/user/qpid-cpp-0.34/build/src && /opt/csw/bin/cmake -E cmake_link_script CMakeFiles/qpidtypes.dir/link.txt --verbose= 
make: Fatal error: Command failed for target `src/libqpidtypes.so.1.0.0' 
Current working directory /export/home/user/qpid-cpp-0.34/build 
*** Error code 1 

這是由-E選項調用的命令文件是CMakeFiles/qpidtypes.dir/link.txt,它包含:

/usr/bin/gcc -fPIC -fno-visibility-inlines-hidden -fvisibility=hidden -Wl,--version-script=/export/home/user/qpid-cpp-0.34/src/qpid.linkmap -m64 -pthread -shared -Wl,-hlibqpidtypes.so.1 -o libqpidtypes.so.1.0.0 CMakeFiles/qpidtypes.dir/qpid/types/Exception.cpp.o CMakeFiles/qpidtypes.dir/qpid/types/Uuid.cpp.o CMakeFiles/qpidtypes.dir/qpid/types/Variant.cpp.o -L/usr/local/lib -L/usr/lib/mps -luuid -Wl,-R/usr/local/lib:/usr/lib/mps: 

這個問題似乎是輪候冊, - 版本腳本= /導出/ home/user中/ qpid-CPP-0.34/src目錄/qpid.linkmap

This question繞過使用兩個破折號的選項,但我不明白我該怎麼做。

問題:我該如何讓ld接受--version-script信息?


在LD版本的一些信息:

$ gcc -print-prog-name=ld 
/usr/ccs/bin/ld 

$ /usr/ccs/bin/ld -V 
ld: Software Generation Utilities - Solaris Link Editors: 5.10-1.1514 

的gcc版本的一些信息:

Target: sparc-sun-solaris2.10 
Configured with: /home/dam/mgar/pkg/gcc4/trunk/work/solaris10-sparc/build-isa-sparcv8plus/gcc-4.9.2/configure --prefix=/opt/csw --exec_prefix=/opt/csw --bindir=/opt/csw/bin --sbindir=/opt/csw/sbin --libexecdir=/opt/csw/libexec --datadir=/opt/csw/share --sysconfdir=/etc/opt/csw --sharedstatedir=/opt/csw/share --localstatedir=/var/opt/csw --libdir=/opt/csw/lib --infodir=/opt/csw/share/info --includedir=/opt/csw/include --mandir=/opt/csw/share/man --enable-cloog-backend=isl --enable-java-awt=xlib --enable-languages=ada,c,c++,fortran,go,java,objc --enable-libada --enable-libssp --enable-nls --enable-objc-gc --enable-threads=posix --program-suffix=-4.9 --with-cloog=/opt/csw --with-gmp=/opt/csw --with-included-gettext --with-ld=/usr/ccs/bin/ld --without-gnu-ld --with-libiconv-prefix=/opt/csw --with-mpfr=/opt/csw --with-ppl=/opt/csw --with-system-zlib=/opt/csw --with-as=/usr/ccs/bin/as --without-gnu-as 
Thread model: posix 
gcc version 4.9.2 (GCC) 
+0

Solaris鏈接器不知道w'--version-script-information'標誌。嘗試使用'-M'來代替。 – fuz

回答

0

的問題是,Solaris鏈接不承認許多選項開始有兩個破折號。

Solaris ld: fatal: unrecognized option '--' 

可以通過使用

ld -z help 

,並找到正確的替換來解決。


在我的特殊情況下,我找到了一個solution in the qpid mailing list,這是不使用--version腳本都:

在SunOS(至少在我的機器上)這不工作:

在/ usr/bin中/ GCC -fPIC -fno能見度 - 內聯隱藏-fvisibility =隱藏

輪候冊, - 版本腳本= /導出/家庭/ NONAME /安裝/ qpid-0.28_tmptest/cpp/src/qpid.linkmap

-shared -Wl,-hlibqpidtypes.so.1 -o libqpidtypes.so.1.0.0 CMakeFiles/qpidtypes.dir/qpid/types/Exception.cpp.o CMakeFiles/qpidtypes.dir/qpid/types/Uuid .cpp.o CMakeFiles/qpidtypes.dir/qpid/types/Variant.cpp.o -L/usr/local/lib -L/usr/lib/mps -luuid -Wl,-R/usr/local/lib :/ usr/lib中/ MPS

的問題是:
「輪候冊, - 版本腳本= /導出/家庭/ NONAME /安裝/ qpid-0.28_tmptest/CPP/src目錄/ qpid.linkmap」

所以需要在cpp/src/CMakeLists.txt中插入以下內容:

184 if(GCC_VERSION VERSION_EQUAL 4.1.2)185消息 (STATUS「不能限制gcc上的庫符號導出 4.1。(HIDE_SYMBOL_FLAGS「-fno-visibility-inlines-hidden」)187其他(GCC_VERSION VERSION_EQUAL 4.1.2)188組(HIDE_SYMBOL_FLAGS 「-fno-visibility-inlines-hidden -fvisibility = hidden」)189設置(QPID_LINKMAP $ {CMAKE_CURRENT_SOURCE_DIR} /qpid.linkmap)190 191# ---------------------需要爲Solaris 192插入以下三行if(不CMAKE_SYSTEM_NAME STREQUAL的SunOS)193 集(LINK_VERSION_SCRIPT_FLAG 「輪候冊, - 版本腳本= $ {} QPID_LINKMAP」) 194 ENDIF(不CMAKE_SYSTEM_NAME STREQUAL的SunOS)195 196
ENDIF(GCC_VERSION VERSION_EQUAL 4.1.2)

+0

不使用它有一些缺點(當然),但是我發現雖然GNU文檔聲明版本腳本的格式相同,但它們確實不是。顯然存在一些差異,使得容易引入不兼容性,例如GNU變體似乎支持'/ ** /'註釋,但Solaris不支持。 – stefanct

相關問題