mar*_*rux 8 c++ iphone xcode linker new-operator
在我们的iPhone XCode 3.2.1项目中,我们链接了2个外部静态C++库libBlue.a和libGreen.a.libBlue.a全局覆盖了" new "运算符,用于自己的内存管理.然而,当我们构建我们的项目时,libGreen.a最终会使用libBlue的new运算符,这会导致崩溃(可能是因为libBlue.a正在假设所分配的结构类型).libBlue.a和libGreen.a都是由第三方提供的,因此我们无法更改任何源代码或构建选项.
当我们从项目中删除libBlue.a时,libGreen.a没有任何问题.然而,没有任何数量的库的链接顺序混洗似乎解决了问题,也没有任何实验与各种链接标志.有没有办法告诉XCode告诉链接器"让libGreen使用new运算符使用标准的C++ new运算符而不是libBlue重新定义的运算符"?
也许您可以使用GNU objcopy进行研究,类似于objcopy --redefine-sym oldNew=newNew libBlue.a
. 我看到的最大问题是苹果的开发者工具套件似乎不包括 objcopy。您可以从MacPorts ( )安装 objcopy sudo port install binutils
,但该 objcopy 可能无法操作 ARM 目标文件。MacPorts 中有几个 ARM binutils,我猜这arm-elf-binutils
是你最好的选择。
除此之外,您可以反汇编 libBlue.a,使用sed
脚本重命名其新运算符,然后重新组装它。也许您甚至可以直接操作 libBlue.a 符号表。
归档时间: |
|
查看次数: |
1588 次 |
最近记录: |