2017-08-24 48 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下重新编译它们。