0

这是错误:

symbol lookup error: ./src/libprog3.so: undefined symbol: pow

库中的其他所有内容都可以正常工作,即使是使用 math.h 的函数,但是当我调用需要 pow() 的函数时,它会崩溃。当它是一个共享库时,它工作得非常好。我正在使用 gcc 和 makefile 进行编译。我对 makefile 所做的唯一更改是为库添加 -ldl。我还有 -lm 在里面。我更改了驱动程序以支持更改为 dll 而不是共享库,但导致错误的函数没有更改。

我需要更改的makefile还有更多内容吗?这是生成文件:

testlib: src/driver.o src/prog3.o
    gcc -fPIC -Wall -c src/prog3.c -o src/prog3.o
    gcc -Wall -shared -o src/libprog3.so src/prog3.o
    gcc -Wall -o $@ src/driver.c -ldl -lm -Lsrc -lprog3
4

1 回答 1

3

你需要做:

gcc -Wall -shared -o src/libprog3.so src/prog3.o -lm

也就是说,必须使用它们的依赖项来构建共享库。如果省略-lm,则表示您告诉链接器未解析libprog3.so的符号旨在由主程序或已导致加载的库中的符号解析。我看到您确实-lm为主程序添加了链接命令行,但我的猜测是主程序实际上并没有使用任何符号libm.so,因此它没有被添加到DT_NEEDED主程序的表中,因此尚未加载.

在任何情况下,像这样明确依赖关系几乎总是最好的。

于 2012-04-13T04:24:22.940 回答