为Windows编译libobjc2(通过交叉编译的方式)
2024-08-31 03:03:44
前提:Linux系统、git、clang-8、g++-mingw-w64-x86-64、gobjc++-mingw-w64-x86-64。
一、下载源代码
git clone https://github.com/gnustep/libobjc2.git
二、配置环境变量
export CC=clang #可能需要创建软链接 ln -s /usr/bin/clang- /usr/bin/clang,也可以替换为export CC=clang-。
export CXX=clang++ #可能需要创建软链接 ln -s /usr/bin/clang++- /usr/bin/clang++,也可以替换为export CXX=clang++-。
export RUNTIME_VERSION=gnustep-2.0 #指定使用gnustep-2.0 ABI
export LDFLAGS="-Wl,--export-all-symbols,--output-def,libobjc.def" #导出libobjc.def
export OBJCFLAGS="-fblocks"
export CFLAGS="--target=x86_64-w64-mingw32"
export CXXFLAGS="--target=x86_64-w64-mingw32"
三、编译libobjc2
cd libobjc2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX} -DCMAKE_MODULE_LINKER_FLAGS=${LDFLAGS} -DTESTS= #设置TESTS=,因为TESTS与--export-all-symbols不兼容。
#删除CMakeFiles/objc.dir/flags.make中所有的-fPIC,因为-fPIC与Windows不兼容。
make -j8
make install
四、测试(在Widnows进行)
lib /machine:amd64 /def:libobjc.def
//test.mm
#include <iostream> using namespace std; __attribute__((objc_root_class)) @interface Test
+ (void) test;
@end @implementation Test
+ (void) test {
cout << "Hello World!\n";
}
@end int main() {
[Test test];
return ;
}
clang-cl test.mm -o test.exe /link libobjc.lib /libpath:<path-to-libobjc>
最新文章
- Mysql日志解析
- 如何使用 Docker 部署一个基于 Play Framework 的 Scala Web 应用?
- SpringMvc入门三----控制器
- CodePage代码,MultiByteToWideChar
- 深入浅出畅谈Zigbee
- php基础_2
- Django ORM详解
- 使用async await 封装 axios
- JavaScript(二)数据类型(一)
- __x__(38)0909第五天__雪碧图的制作
- Balanced Number HDU - 3709 数位dp
- hdu-2509-反nim博弈
- 无需公众号PHP微信登录微信授权微信第三方登录微信开发php开发
- lucene源码分析(1)基本要素
- xcode官网下载地址
- gulp教程之gulp-autoprefixer
- php单例模式和工厂模式
- ARM开发板不工作的几个原因
- debug的时候出现停在ThreadPoolexecutor.class文件中停留的解决办法
- macOS如何正确驱动集成显卡HDMI(包括视频和音频)