gpt4 book ai didi

c - 编译 MEX 文件时出现链接问题

转载 作者:行者123 更新时间:2023-11-30 17:41:25 24 4
gpt4 key购买 nike

我正在尝试编译我编写的 mex 文件,以便在 MATLAB 中运行预先存在的 C 程序。我收到以下错误:

>> mex src/main.c -Iinclude -I/Users/my_name/mpfr-3.1.1/src/ -I/Users/my_name/gmp-5.0.5 -Lsrc0 -output cpdetect_c
Undefined symbols for architecture x86_64:
"_binomial_main", referenced from:
_cpdetect in main.o
"_gaussian1_main", referenced from:
_cpdetect in main.o
"_gaussianU_main", referenced from:
_cpdetect in main.o
"_mpfr_clears", referenced from:
_cpdetect in main.o
"_mpfr_exp10", referenced from:
_cpdetect in main.o
"_mpfr_inits2", referenced from:
_cpdetect in main.o
"_mpfr_set_d", referenced from:
_cpdetect in main.o
"_poisson_main", referenced from:
_cpdetect in main.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

我很困惑,因为这些函数都是我在代码中#Include的文件的一部分。如何让编译器找到它们?

我在 Mac OS X 10.8 上运行 MATLAB R2013a,Xcode 版本为 4.6.3。

感谢您的任何建议!

更新1:

@Shai:我的 src0 文件夹的内容:

>> ls src0
Makefile gaussian1.o test_gaussian1.c test_tools.c
Makefile.am loadtraj.c test_gaussian1_point_calc.c test_tools.o
Makefile.in loadtraj.o test_load tools.c
binomial.c main.c test_load.c tools.o
binomial.o main.o test_load.o
cpdetect poisson.c test_poisson.c
gaussian1.c poisson.o test_tools

这个 C 程序(最初是为了在命令行上运行)来自一位 friend ,并且已经存在 src0 文件夹。我在编写 mex 函数时修改了“src”文件夹中的代码文件,但没有触及 src0 文件夹。

更新2:我意识到我指向了错误的 mpfr 位置。我现在使用以下编译命令:

>> mex src/main.c src/binomial.c src/gaussian1.c src/gaussianU.c src/poisson.c -Iinclude -I/usr/local/include -lmpfr -output cpdetect_c

它给出了以下错误:

Undefined symbols for architecture x86_64:
"_mpfr_mul_d", referenced from:
_gaussian1_calc_constant_part in gaussian1.o
_gaussianU_calc_constant_part in gaussianU.o
"_mpfr_printf", referenced from:
_find_gaussian1_change_point in gaussian1.o
_gaussian1_point_calc in gaussian1.o
_gaussianU_calc_constant_part in gaussianU.o
_find_gaussianU_change_point in gaussianU.o
_find_poisson_change_point in poisson.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

mex: link of ' "cpdetect_c.mexmaci64"' failed.

这很奇怪。这并不是说编译器找不到任何 mpfr 函数 - 还有很多其他函数似乎可以轻松找到(如果我故意省略 -lmpfr 标志,我会得到更长的 undefined symbol 列表) 。我确实确认 mpfr_mul_d 和 mpfr_printf 是我安装的 mpfr 发行版的一部分。有任何想法吗?谢谢。

最佳答案

Amro 提供了答案 - 有必要指向库的位置(在本例中使用标志 -L/usr/local/lib)并告诉编译器链接到它(使用标志-lmpfr)。还要感谢 Shai 帮助解决此问题。

关于c - 编译 MEX 文件时出现链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com