Erlang 钢筋:交叉编译选项

Erlang 钢筋:交叉编译选项,erlang,cross-compiling,rebar,Erlang,Cross Compiling,Rebar,我正在尝试使用rebar在64位arch系统上生成32位arch版本。我不清楚如何修改应用程序的rebar.config才能做到这一点 我已经查看了rebar源代码,以了解它们是如何检测我的环境的:rebar_utils.erl将体系结构设置为“x86_64-unknown-linux-gnu”,这在rebar_port_编译器中设置为“default_env”。我想知道如何让钢筋为另一个目标体系结构编译 我尝试了以下端口环境选项 {port_env, [{"CFLAGS", "$CFLAGS

我正在尝试使用rebar在64位arch系统上生成32位arch版本。我不清楚如何修改应用程序的rebar.config才能做到这一点

我已经查看了rebar源代码,以了解它们是如何检测我的环境的:rebar_utils.erl将体系结构设置为“x86_64-unknown-linux-gnu”,这在rebar_port_编译器中设置为“default_env”。我想知道如何让钢筋为另一个目标体系结构编译

我尝试了以下端口环境选项

{port_env, [{"CFLAGS", "$CFLAGS -fPIC -m32"},{"LDFLAGS", "-arch i386"}]}.
使用这些选项(以及我路径中的32位Erlang安装),当我运行rebar get deps compile时,我的依赖项仍被构建为64位,因此ld跳过我的32位库(最终失败,因为它找不到64位实现)

/usr/bin/ld:搜索-lerl_接口时跳过不兼容的/lib/erlang/lib/erl_接口-3.7.14/lib/liber_接口.a
/usr/bin/ld:找不到-lerl_接口
collect2:ld返回了1个退出状态
错误:sh(cc c_src/epam.o$LDFLAGS-shared-L”/lib/erlang/lib/erl_interface-3.7.14/lib“-lerl_interface-lei-o priv/lib/epam.so)

我需要做什么来强制我的依赖项编译为32位?我在这里的尝试无效。

rebar.config
中的
port\u env
设置可以使用
ERLANG\u ARCH
环境变量来确定ERLANG运行时是为32位还是64位系统构建的。例如,以下
port_env
定义设置了适用于x86_64、i686和i386芯片体系结构的C编译器的
-m32
-m64

{port_env, [{"x86_64", "CFLAGS", "$CFLAGS -m$ERLANG_ARCH"},
            {"i[36]86", "CFLAGS", "$CFLAGS -m$ERLANG_ARCH"}]}.
每个元组中的第一个字符串是一个正则表达式,与由返回的Erlang运行时的系统体系结构字符串相匹配。在本例中,仅当正则表达式匹配时,才会添加额外的
-m$ERLANG_ARCH
选项,并且所有其他体系结构都获得默认的
CFLAGS
设置

{port_env, [{"x86_64", "CFLAGS", "$CFLAGS -m$ERLANG_ARCH"},
            {"i[36]86", "CFLAGS", "$CFLAGS -m$ERLANG_ARCH"}]}.