使用库时如何避免在 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。
在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。