我使用了客户端提供的静态库,并且库没有命名为“lib * .a”,那么在编译时如何使用它。
我尝试将其添加为库(类似于“-l *”),但后来我找不到-l *,我想这是因为它试图找到“lib * .a”。
然后我将文件名作为参数放在命令行中的绝对路径,然后我得到“链接器输入文件未使用,因为链接未完成”,以及许多未定义的引用。我也尝试过命令行来编译cpp文件,我可以在没有任何警告或错误的情况下获取目标文件。
我的问题是如何使用Netbeans中的这种库来构建项目?
另一个问题是终端,我得到目标文件后该怎么办?这可能有点愚蠢,但我是c ++的新手,所以希望任何人都可以帮助我,因为我真的很困惑,在谷歌找不到任何直接的答案。
提前感谢。
答案 0 :(得分:2)
将库重命名为libwhatever.a
,然后使用-L /path/to/whatever -lwhatever
链接。
答案 1 :(得分:1)
然后我把文件名和它在命令行中的绝对路径作为参数,然后我得到“链接器输入文件未使用,因为链接未完成”。
听起来您在编译时指定了库,但是在链接时需要指定它:
$ ls
main.cpp Makefile test.cpp
$ show test.cpp main.cpp Makefile
### test.cpp
1 #include <stdio.h>
2 void f() {
3 puts("Hello, world!");
4 }
### main.cpp
1 void f();
2 int main() {
3 f();
4 return 0;
5 }
### Makefile
1 main: main.cpp foo.a
2 foo.a(test.o): test.o
3 foo.a: foo.a(test.o)
$ make
g++ -c -o test.o test.cpp
ar rv foo.a test.o
ar: creating foo.a
a - test.o
g++ main.cpp foo.a -o main
$ ./main
Hello, world!
如果您的makefile在编译时使用LDLIBS(默认情况下可能会这样做),那么您可以将foo.a添加到LDLIBS。为了一个更简单的例子,我没有这样做。
答案 2 :(得分:0)
显然你正在使用* nix编译器。
尝试指定执行链接的调用的库路径。
显然,您已将其指定为带有“-c”选项的调用,该选项不链接(仅编译)。
编辑:示例(包括错误):
Alf@SpringFlower ~/leo $ mkdir lib; cd lib Alf@SpringFlower ~/leo/lib $ cat >foo.cpp int foo() { return 42; } Alf@SpringFlower ~/leo/lib $ g++ -c foo.cpp Alf@SpringFlower ~/leo/lib $ ar -s foolib.a foo.o ar: 'foolib.a': No such file Alf@SpringFlower ~/leo/lib $ ar -rs foolib.a foo.o ar: creating foolib.a Alf@SpringFlower ~/leo/lib $ ls foo.cpp foo.o foolib.a Alf@SpringFlower ~/leo/lib $ cd .. Alf@SpringFlower ~/leo $ cat >main.cpp extern int foo(); #include <iostream> int main() { std::cout << foo() << std::endl; } Alf@SpringFlower ~/leo $ g++ -c main.cpp Alf@SpringFlower ~/leo $ g++ main.o lib/foolib.a Alf@SpringFlower ~/leo $ a bash: a: command not found Alf@SpringFlower ~/leo $ ./a 42 Alf@SpringFlower ~/leo $ _
干杯&amp;第h。,