在 Ubuntu 上编译和使用 OpenFST 时如何处理“对 dlopen 未定义的引用”错误?

在 Ubuntu 上编译和使用 OpenFST 时如何处理“对 dlopen 未定义的引用”错误?

尝试编译并使用开放FST在 Ubuntu 13.10 上会导致链接错误,如“未定义对 dlopen 的引用”。如何修复此问题?在线搜索建议-ldl在 gcc 命令行中包含此问题,但这还不够。

答案1

编译如下:

./configure LDFLAGS=-Wl,--no-as-needed
make
sudo make install

要编译a.cpp使用该库的程序,请执行以下操作

g++ -I /usr/local/include a.cpp /usr/local/lib/libfst.so -Wl,--no-as-needed -ldl

-ldl之后出现的很重要-Wl,--no-as-needed

程序的运行正如 OpenFST 提供的 README 所期望的那样,你只需要/usr/local/lib在你的 中包含以下内容即可LD_LIBRARY_PATH。例如,

LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" ./a.out

答案2

正如在内置规则目录

链接单个目标文件

nn.o通过 C 编译器运行链接器(通常称为 )可自动生成ld。使用的精确配方是:

$(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)

隐式规则使用的变量

LDFLAGS 目录

当编译器需要调用链接器时,需要为其提供额外的标志, ld例如-L-lfoo应将库 () 添加到 LDLIBS 变量中。

所以在这种情况下-ldl应该设置或添加到LDLIBS,而不是LDFLAGS。

相关内容