繁体   English   中英

使用库时如何避免C++编译中出现多个-l

[英]How to avoid multiple -l in C++ compiling when using libraries

在 c++ 中使用外部库时,我确实遇到了很多问题。 该库包括一个包含 header 文件的包含文件,以及一个包含 all.la、.so 文件的 lib 文件。 我将库添加到 usr/local/include 和 usr/local/lib 中,还编辑了 ld.so.conf 文件。 完成所有这些后,我认为我的程序可以编译成功。 但是,出现了错误:

$ g++ -o b try.cpp
 /usr/bin/ld: /tmp/ccTWcUvt.o: in function `main':
try.cpp:(.text+0x36): undefined reference to `OsiClpSolverInterface::OsiClpSolverInterface()'
/usr/bin/ld: try.cpp:(.text+0x45): undefined reference to `OsiClpSolverInterface::~OsiClpSolverInterface()'

然后我手动输入了 -l 后面的所有库文件名,并使用以下命令再次编译:

g++ -o b try.cpp -lCbc -lCbcSolver -lCgl -lClp -lcoinasl -lcoinglpk -lcoinmumps -lCoinUtils -lOsi -lOsiCbc -lOsiClp -lOsiCommonTest -lOsiGlpk

这次它确实编译成功并且程序运行良好。 我想知道是否有任何方法可以避免这种冗长? 另外,如果有人可以向我解释为什么仅添加 lib 文件的路径是不够的,但必须明确指出名称,我也会非常感激。

非常感谢!

linker 知道您正在调用哪些函数。 它不知道这些函数包含在哪些库中,也不会通过 go 搜索数百或数千个库来找到它们。

使用 gcc,比使用 Visual C++ 更重要的是,库的顺序可能很重要,因此它们甚至不支持指定库的编译指示。

这不是冗长。 如果对您来说输入太多,您需要使用 Makefiles。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM