安装 xlnt 后出现 -lxnt 标志的 G++ 错误

G++ error with -lxnt flag after xlnt is installed

我正在尝试在 Ubuntu 18 上安装 xlnt 库。我已经完全按照 instructions 在回购协议中所说的那样安装了 xlnt。当我尝试编译我的代码时,弹出以下错误:

/usr/bin/ld: cannot find -lxlnt
collect2: error: ld returned 1 exit status
makefile:204: recipe for target 'BOF-debug-static' failed
make: *** [BOF-debug-static] Error 1

我一直在安装其他库以使代码正常工作,我注意到其他库正在 /usr/local/lib 处创建 .a 文件以及一些其他 .la 和 .so 文件。当我安装 xlnt 时,它不会创建任何 .a 文件,但会创建 .so 和 .so.1.2 文件。不确定这是否相关,但这是我注意到的。

如何让 g++ 发现 xlnt 并使 -lxlnt 标志起作用?

您正在构建的目标 BOF-debug-static 显然是一个要求 完全静态的 linkage,带有 -static linkage 选项,或者可能是 请求静态 linkage 特别是 libxlnt,带有 linkage 选项,例如:

-Wl,-Bstatic -lxlnt -Wl,-Bdynamic

因为,正如您观察到的,libxlnt 默认情况下只提供一个 shared/dynamic 库 libzlint.so ( -> libzlint.so.X.Y.Z), 并且没有静态库 libzlnt.a,linker 会忽略共享库 需要静态 link -lxlnt 并说:

/usr/bin/ld: cannot find -lxlnt

您不能link静态共享库。

但是,如果您将 CMake 构建系统配置为:

cmake -DSTATIC=ON [your previous options...]

然后 make 将构建一个静态库,运行 make install(作为 root)将创建 /usr/local/lib/libxlnt.a.