【发布时间】:2015-03-30 08:00:38
【问题描述】:
我正在尝试使用 rebar 在 64 位拱形系统上生成 32 位拱形版本。我不清楚我需要如何修改应用程序的 rebar.config 才能做到这一点。
我查看了 rebar 源代码以了解它们如何检测我的环境:rebar_utils.erl 将架构设置为“x86_64-unknown-linux-gnu”,并且在 rebar_port_compiler 中将其设置为“default_env”。我想知道如何让 rebar 为另一个目标架构进行编译。
我尝试了以下 port_env 选项
{port_env, [{"CFLAGS", "$CFLAGS -fPIC -m32"},{"LDFLAGS", "-arch i386"}]}.
使用这些选项(以及我的路径中的 32 位 Erlang 安装),当我运行 rebar get-deps compile 时,我的依赖项仍在构建为 64 位,因此 ld 跳过了我的32 位库(最终因为找不到 64 位实现而失败)
/usr/bin/ld: skipping incompatible <PATH TO 32-bit erlang install>/lib/erlang/lib/erl_interface-3.7.14/lib/liberl_interface.a when searching for -lerl_interface
/usr/bin/ld: cannot find -lerl_interface
collect2: ld returned 1 exit status
ERROR: sh(cc c_src/epam.o $LDFLAGS -shared -L"<PATH TO 32-bit erlang install>/lib/erlang/lib/erl_interface-3.7.14/lib" -lerl_interface -lei -o priv/lib/epam.so)
我需要做什么才能强制我的依赖项编译为 32 位?我在这里的尝试不起作用。
【问题讨论】:
标签: erlang cross-compiling rebar