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

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

在c++中使用外部库时,我确实遇到了很多问题。 该库包括头文件的包含文件和包含所有 .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 文件的路径是不够的,但必须明确指出名称,我也将非常非常感谢。

非常感谢!

链接器知道您正在调用哪些函数。它不知道这些函数包含在哪些库中,也不会搜索成百上千个库来找到它们。

对于 gcc,库的顺序比 Visual C++ 更重要,因此它们甚至不支持 pragma 来指定库。

这不是冗长。如果打字太多,您需要使用 Makefiles。