You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arch Linux下编译highs-sys时出现undefined reference链接错误求助

Arch Linux下编译highs-sys时出现undefined reference链接错误求助

我目前在Arch Linux x86_64环境下,使用Rust 1.66.0稳定版、g++ 12.2.0,遇到了highs-sys crate的链接问题——这个问题是通过good-lp间接依赖引入的,而且即使脱离我自己的代码单独测试highs-sys也会出现。

我试过最新的master分支(commit c785240)、v1.2.2版本,以及之前用了好几个月都没问题的v0.2.1版本,结果都一样。所以这应该不是highs-sys的新版本问题,大概率是我的工具链出了问题。

我的工具链版本信息如下:

$ cargo --version
cargo 1.66.0 (d65d197ad 2022-11-15)

$ rustc --version
rustc 1.66.0 (69f9c33d7 2022-12-12)

$ cc --version
cc (GCC) 12.2.0

$ ld --version
GNU ld (GNU Binutils) 2.39.0

复现步骤

我克隆并构建highs-sys的过程是这样的:

$ git clone --recursive https://github.com/rust-or/highs-sys
$ cd highs-sys
$ cargo build

构建成功,输出:

Finished dev [unoptimized + debuginfo] target(s) in 3m 35s

接着运行单元测试也没问题:

$ cargo test --lib

测试结果:

Finished test [unoptimized + debuginfo] target(s) in 0.04s
Running unittests src/lib.rs (target/debug/deps/highs_sys-96b0b941fcc31775)
running 2 tests
test bindgen_test_layout___fsid_t ... ok
test bindgen_test_layout_imaxdiv_t ... ok
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

但运行集成测试的时候就出问题了:

$ cargo test --test test_highs_call

编译时出现链接错误,核心错误信息是:

error: linking with `cc` failed: exit status: 1
...
/usr/bin/ld: /tmp/highs-sys/target/debug/deps/test_highs_call-e669101ae4108d78.5gi5ablibidmtrpd.rcgu.o: in function `test_highs_call::highs_call':
/tmp/highs-sys/tests/test_highs_call.rs:88: undefined reference to `Highs_lpCall'
collect2: error: ld returned 1 exit status

另一个集成测试test_highs_functions也会出现类似的所有Highs_*函数未定义的错误。

排查细节

我用nm命令检查了相关文件:

  • 在测试目标文件里,符号是未定义的:
    $ nm target/debug/deps/test_highs_call-e669101ae4108d78.5gi5ablibidmtrpd.rcgu.o | grep Highs_lpCall
    U Highs_lpCall
    
  • 在highs-sys的静态库中,符号是已定义的,但所有符号的地址都是00000000,这看起来有点奇怪:
    $ nm /tmp/highs-sys/target/debug/deps/libhighs_sys-addd17046a23d2a8.rlib | grep Highs_lpCall
    nm: lib.rmeta: no symbols
    00000000 T Highs_lpCall
    

尝试过的解决方案

  • 切换到gcc11:设置CC=/usr/bin/gcc-11、CXX=/usr/bin/g++-11、RUSTFLAGS="-C linker=/usr/bin/gcc-11",但还是出现同样的未定义引用错误。
  • 切换到clang:设置CC=/usr/bin/clang、CXX=/usr/bin/clang++、RUSTFLAGS="-C link-arg=-fuse-ld=lld",此时链接成功,测试全部通过,但这只是临时 workaround,不是根本解决办法。

其他调用C API的Rust库在我的环境下都能正常工作,所以实在搞不清问题出在哪,有没有大佬能给点建议?

备注:内容来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:43:06