在macOs Sierra

时间:2017-08-24 12:49:08

标签: gcc macos-sierra elf mach-o

我想为我用于Linux的Makefile项目创建macOS二进制文件。

原始Linux项目链接elf32静态lib所以我想我可以利用objconv进行这种转换。

我通过致电进行转换:

objconv -fmacho32 -nu lib_elf.a lib_macho.a

并获得以下输出:

  

警告1053:公共常量转换为公共:   triple_des_software_global_tdes_standard警告1053:常用常量   转换为公共:triple_des_software_global_mode警告1053:   公共常量转换为public:triple_des_software_global_key   警告1053:公共常量转换为公共:maskk警告1053:   常用常量转换为public:sbox警告1053:常见   常量转换为公共:_SM警告1053:常用常量   转换为public:bit_size警告1053:常用常量转换   公开:_local_ucl_a_sm2vp256警告1053:常用常量   转换为公共:_local_ucl_inv2_sm2vp256警告1053:常见   常量转换为public:_local_ucl_p_sm2vp256警告1053:   公共常量转换为public:signature_computation警告   1053:公共常量转换为公共:_ucl_n_stored警告1053:   公共常量转换为public:_ucl_rsqr_stored警告1053:   公共常量转换为public:_ucl_r_stored警告1053:   常用常量转换为公共:sm2fp192警告1053:常见   常量转换为公共:m0警告1053:常用常量   转换为公共:shadec_ctx警告1053:常用常量   转换为公共:shasign_ctx警告1053:常用常量   转换为公共:aesctx警告1053:常用常量转换为   public:W32 Warning 1053:公共常量转换为public:H32   警告1053:常用常量转换为公共:a32警告1053:   常用常量转换为公共:b32警告1053:常用常量   转换为public:c32警告1053:常量常量转换为   public:d32 Warning 1053:公共常量转换为public:e32   警告1053:公共常量转换为公共:f32警告1053:   常用常量转换为公共:g32警告1053:常用常量   转换为public:h32警告1053:常量常量转换为   public:workbuffer警告1053:公共常量转换为public:   _stack警告1053:公共常量转换为public:_stack_index警告1053:公共常量转换为public:hash_size警告   1053:公共常量转换为public:using_sha_hardwareInput   library:lib_elf.a,格式:ELF,输出:lib_macho.a,格式:Mach-O   Little Endian

     

删除了392个调试部分147删除了异常部分1922更改   在符号名称的前导下划线

我想到现在为止应该可以吗?

当我尝试链接lib_macho.a时,我得到以下输出:

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 non-weak -o ../bin/darwin/ca_sign_build -lcrt1.o -L。 -L /应用/ Xcode.app /内容/开发商/工具链/ XcodeDefault.xctoolchain在/ usr / bin中/../ lib中/ GCC / i686的 - 苹果darwin10 / 4.0.1   -L /应用/ Xcode.app /内容/开发商/工具链/ XcodeDefault.xctoolchain在/ usr / bin中/../ lib中/ GCC   -L /应用/ Xcode.app /内容/开发商/工具链/ XcodeDefault.xctoolchain在/ usr / bin中/../ lib中/ GCC / i686的 - 苹果darwin10 / 4.0.1 /../../ ..   test.o -l_macho -lgcc -lSystem        ld:in ./lib_macho.a(ucl_sys.c.o),在__TEXT部分,__ text reloc 2:R_ABS reloc但在目标地址没有绝对符号   架构i386       collect2:ld返回1退出状态       make:*** [ca_sign_build]错误1

我无法在任何有用的文字上搜索:

  

ld:在./lib_macho.a(ucl_sys.c.o)中,在__TEXT部分,__ text reloc 2:R_ABS reloc但在目标地址处没有绝对符号用于体系结构   I386

所以我想知道是否有人可以告诉我有关该链接器错误的信息?

我尝试使用最新的gcc基于gng-llvm,gcc-4.2和gcc-4.0,我是通过使用xcodelegacy.sh从xcode .dmg中提取的,但我总是得到相同的错误。

错误是否与使用的gcc版本有关,或者需要向objconv提供一些额外的说明,以便我可以解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

只有在非常简单的情况下,才能将对象或库文件从一个操作系统转换为另一个操作系统。由于您拥有原始源文件,因此应在Mac OS下重新编译它们。