2017-08-24 50 views
1

我想爲我爲Linux創建的Makefile項目創建macOS二進制文件。從macOs上的elf32靜態庫中獲得的mach-o靜態lib鏈接錯誤Sierra

原始的Linux項目鏈接反對elf32靜態庫,所以我想我可以利用objconv來做這個轉換。

我通過調用做轉換:

objconv -fmacho32 -nu lib_elf.a lib_macho.a 

,並得到下面的輸出:

警告1053:常見的不斷轉化爲公衆: triple_des_software_global_tdes_standard警告1053:一般等速 轉化爲公衆: triple_des_software_global_mode警告1053: 常見常量轉換爲公共:triple_des_software_global_key 警告1053:常見常量轉換爲public:maskk警告1053: 常見常量轉換爲public:sbox警告1053:常見 常量轉換爲public:_SM警告1053:常量常量 轉換爲public:bit_size警告1053:常見常量轉換爲 public:_local_ucl_a_sm2vp256警告1053:一般等速 轉化爲公衆:_local_ucl_inv2_sm2vp256警告1053:通用 不斷轉化爲公衆:_local_ucl_p_sm2vp256警告1053: 常見不斷轉化爲公衆:signature_computation警告 1053:常見的不斷轉化爲公衆:_ucl_n_stored警告1053: 一般等速轉換爲公共:_ucl_rsqr_stored警告1053: 常見常量轉換爲公共:_ucl_r_stored W arning 1053: 常見不斷轉化爲公衆:sm2fp192警告1053:通用 不斷轉化爲公衆:M0警告1053:一般等速 轉化爲公衆:shadec_ctx警告1053:一般等速 轉化爲公衆:shasign_ctx警告1053:一般等速 轉換爲公共:aesctx警告1053:常見常量轉換爲 公共:W32警告1053:常見常量轉換爲公共:H32 警告1053:常見常量轉換爲公共:a32警告1053: 常見常量轉換爲公共:b32警告1053 :常見常量 轉換爲公共:c32警告1053:常見常量轉換爲 public:d32警告1053:常見常量轉換爲public:e32 警告1053:常見常量轉換爲公共:f32警告1053: 常見常量轉換爲公共:g32警告1053:常量常量 轉換爲public:h32警告1053:常量常量轉換爲 public:workbuffer警告1053:常見常量轉換公共常量: _stack警告1053:公共常量轉換爲公共:_stack_index警告1053:公共常量轉換爲public:hash_size警告 1053:常見常量轉換爲public:using_sha_hardwareInput 庫:lib_elf.a,格式:ELF,輸出:lib_macho .a,格式:Mach-O Little Endian

392調試部分刪除147異常部分rem 1922年修訂 在符號名稱上的下劃線

我想現在應該可以嗎?

當我嘗試鏈接到lib_macho。一個我獲得以下的輸出:

make 
gcc-4.0 -O3 -g0 -v -W -Wall -DWORD32 -m32 -I../include -I../include/ucl -L. -o ../bin/darwin/ca_sign_build test.o -m32 -v -l_macho 
couldn't understand kern.osversion `16.7.0' 
Using built-in specs. 
Target: i686-apple-darwin10 
Configured with: /var/tmp/gcc_40/gcc_40-5494~315/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin10 --with-arch=apple --with-tune=generic --host=i686-apple-darwin10 --target=i686-apple-darwin10 
Thread model: posix 
gcc version 4.0.1 (Apple Inc. build 5494) 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/gcc/i686-apple-darwin10/4.0.1/collect2 

-dynamic -arch i386的-macosx_version_min 10.4 -weak_reference_mismatches非弱-o ../bin/darwin/ca_sign_build -lcrt1.o -L。 -L/Applications/Xcode.app /目錄/ Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin /../ lib/gcc/i686-apple-darwin10/4.0.1 -L/Applications/Xcode.app /目錄/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/gcc -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin /../ lib/gcc/i686-apple-darwin10/4.0.1 /../../ test.o -l_macho -lgcc -lSystem ld:in ./lib_macho.a(ucl_sys.co),在__TEXT部分,__ text reloc 2:R_ABS RELOC,但在目標地址沒有絕對的符號 i386硬件架構 collect2:LD返回1個退出狀態 化妝:*** [ca_sign_build]錯誤1

我不能谷歌在任何有用的文字:

LD:在./lib_macho.a(ucl_sys.co),在第__TEXT,__文本RELOC 2:R_ABS RELOC但目標沒有絕對的符號地址架構 I386

所以我不知道是否有任何人誰可以告訴我一些關於鏈接錯誤?

我試過使用最新的gcc,這是基於clang/llvm的,gcc-4.2和gcc-4.0,我通過使用xcodelegacy.sh從xcode .dmg中提取那些獲得的,但我總是得到相同的錯誤。

錯誤我得到了所使用的gcc版本的問題,或者有一些額外的指令需要提供給objconv,所以我可以解決這個問題?

謝謝!

回答

2

只有在非常簡單的情況下才能將對象或庫文件從一個OS轉換爲另一個OS。既然你有原始的源文件,你應該在Mac OS下重新編譯它們。