前提: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>

为Windows编译libobjc2(通过交叉编译的方式)的更多相关文章

  1. OGRE 2.1 Windows 编译

    版权所有,转载请注明链接 OGRE 2.1 Windows 编译 环境: Windows 7 64Bit Visual Studio 2012 OGRE 2.1 CMake 2.8.12.1 OGRE ...

  2. windows phone 三种数据共享的方式(8)

    原文:windows phone 三种数据共享的方式(8) 本节实现的内容是数据共享,实现的效果描述:首先是建立两个页面,当页面MainPage通过事件导航到页面SecondPage是,我们需要将Ma ...

  3. Windows编译ejabberd

    Windows编译ejabberd(金庆的专栏)安装 erlang OTP. 添加路径到 PATH, 使 erl 可以运行.git clone ejabberd安装 rebar:git clone g ...

  4. golang编译源代码和交叉编译方法

    目录 golang编译源代码和交叉编译方法 编译源代码 编译go1.4 编译go1.12 交叉编译 golang编译源代码和交叉编译方法 编译源代码 golang编译其实很简单,下载一份最新的源代码后 ...

  5. 【转载】OGRE 2.1 Windows 编译

    OGRE 2.1 Windows 编译 环境: Windows 7 64Bit Visual Studio 2012 OGRE 2.1 CMake 2.8.12.1 OGRE: OGRE官方推出了最新 ...

  6. Windows下Wireshark安装版本选择方式

    Windows下Wireshark安装版本选择方式   Wireshark版本分为1.X系列和2.X系列.1.X系列是早期版本,不提供中文版本.2.X系列是新版本,安装后,同时提供中文版和英文版.根据 ...

  7. linux与windows 通过SecureCRT进行文件传输方式

    linux与windows 通过SecureCRT进行文件传输方式 方式一:lrzsz是一款在Linux里可代替ftp上传和下载的程序.(小文件推荐,以4G为界限) # rz -bash: rz: c ...

  8. CEF3.2623使用记录:windows编译

    CEF3.2623使用记录:windows编译 1:cef3.2623下载地址 2623是cef3最后一个支持xp系统的版本,且可以支持html的audio标签,可以用作对html音频的处理下载地址为 ...

  9. Windows 编译安装 nginx 服务器 + rtmp 模块

    有关博客: <Windows 编译安装 nginx 服务器 + rtmp 模块>.<Ubuntu 编译安装 nginx>.<Arm-Linux 移植 Nginx> ...

随机推荐

  1. Zookeeper VS Chubby

    目录 区别的根源      1)一致性      2)Client Cache vs No Cache 总结 参考资料 区别的根源 一个设计良好的系统应该是围绕并为其设计目标服务的. Chubby:p ...

  2. 富文本编辑器--获取JSON

    获取 JSON 格式的内容 可以通过editor.txt.getJSON获取 JSON 格式的编辑器的内容,v3.0.14开始支持,示例如下 <div id="div1"&g ...

  3. mui在tab选项卡中echarts图表不能动态随页面变化大小 只能固定大小

    在mui tab选项卡中一直都不能让echarts动态变化大小 只能固定大小来展示图表,网上说的window.onresize = mycharts.resize;方法根本就没有效果,后面在https ...

  4. JavaWeb零基础入门-02 开发环境安装

    大家好!我又来了,上一篇我们讲了一些基础概念:Html.Web服务器.数据库.Http和JavaWeb三大组件,它们是什么,有什么作用,都有了初步的了解.接下来我们进入学习JavaWeb的第一步,开发 ...

  5. shoeBox超实用的雪碧图(Sprite)图制作工具-使用

    从前端优化说起 浏览器载入单张图片的速度基本取决于图片的大小,但是载入多张图片的速度却和另一个要素息息相关-网络请求数,在图片大小和一致的情况下,图片张数越少其请求数越少其载入速度也就越快.所以在使用 ...

  6. nginx 常用的命令和配置文件

    常用的命令 进入 nginx 目录中 cd  /usr/local/nginx/sbin 1.查看 nginx 版本号  ./nginx -v  2.启动 nginx  ./nginx  3.停止 n ...

  7. linux下PHP扩展安装memcache模块

    linux下PHP扩展安装memcache模块   roid 安装环境RHEL 4Php 5.2.6 所需软件libevent-1.4.6-stable.tar.gz (http://monkey.o ...

  8. orm查询优化 MTV和MVC模型 字段的chioces参数 Ajax

    目录 一.ORM查询优化 1. all()查询 2. only()/defer()方法 (1)only()方法 (2)defer()方法 3. select_related()/prefetch_re ...

  9. 前端js之JQuery

    目录 jQuery介绍 jQuery的优势 jQuery内容 jQuery对象 jQuery基础语法结构 jQuery 使用注意事项 查找标签 基本选择器 层级选择器 基本选择器 属性选择器 表单筛选 ...

  10. 使用Eclipse Memory Analyzer Tool(MAT)分析故障

    Eclipse Memory Analyzer Tool(MAT)是一个强大的基于Eclipse的内存分析工具,可以帮助我们找到内存泄露,减少内存消耗. 工作中经常会遇到一些内存溢出.内存泄露等问题, ...