我想为我用于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提供一些额外的说明,以便我可以解决这个问题?
谢谢!
答案 0 :(得分:2)
只有在非常简单的情况下,才能将对象或库文件从一个操作系统转换为另一个操作系统。由于您拥有原始源文件,因此应在Mac OS下重新编译它们。