前提: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. win10上面快捷方式如何放到桌面上

    1.win+I  快捷方式调出windows设置 ,点击个性化. ​ 2.进入个性化设置界面,点击主题 ​ 3.进入主题设置后,点击右边的相关的设置下的桌面图标设置 4.在弹出的窗口中,将我们希望看到 ...

  2. MySQL查询一张表有多少个字段

    SQL如下 select count(*) from information_schema.COLUMNS where TABLE_SCHEMA='数据库名' and table_name='表名'

  3. Mac OSX编译安装php5.6

    安装好OSX 10.13以后默认自带的php7.1.7,跟现有环境不兼容,所以准备编译安装php5.6,自带的php7不建议卸载,重新安装一份php5.6 1.安装php的一些依赖,推荐使用brew安 ...

  4. springmvc视图文件的保护

    可以将视图文件,包含视图文件的目录放在WEB-INF下,WEB-INF是受保护的,放在该目录下,就只能在代码中访问到了view文件了,用户无法通过浏览器直接输入地址访问.

  5. 【CF 463F】Escape Through Leaf

    题意 给你一棵 \(n\) 个点的树,每个节点有两个权值 \(a_i,b_i\). 从一个点 \(u\) 可以跳到以其为根的子树内的任意一点 \(v\)(不能跳到 \(u\) 自己),代价是 \(a_ ...

  6. win10上使用自带的Hyper-V安装虚拟机

    Hyper-V管理器,新建虚拟机,安装了.iso系统,但启动报错,电脑上联想G40-70,都说在bios设置的security里开启硬件虚拟化选项,可我security里没有虚拟化相关选项, 后来在 ...

  7. maven模块开发(转)

    所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块,multi-module)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...

  8. office visio

    画 流程图软件 UML 是否要用做类图.时序图?????

  9. mongodb 3.0 WT 引擎性能测试(转载)

    网上转载来的测试,仅供参考.原文地址:http://www.mongoing.com/benchmark_3_0 类机器. 测试均在单机器,单实例的情况下进行. 机器A(cache 12G,即内存&g ...

  10. redis 加锁与释放锁(分布式锁1)

    使用Redis的 SETNX 命令可以实现分布式锁 SETNX key value 返回值 返回整数,具体为 - 1,当 key 的值被设置 - 0,当 key 的值没被设置 分布式锁使用 impor ...