据我所知,通过归档各个目标文件,使用ar实用程序创建了boost regex静态库。
我通过在gcc中使用-l选项链接了boost regex库。这非常有效。
g++ *.o libboost_regex-gcc-1_37.a -o sairay.out
我单独编译了boost regex源文件,然后尝试将我的应用程序的目标文件和boost regex的目标文件链接到一个可执行文件中。但现在我收到了错误。
g++ *.o -o sairay.out
Undefined first referenced
symbol in file
main /opt/csw/gcc3/lib/gcc/sparc-sun-solaris2.8/3.4.5/crt1.o
我想知道链接静态库和链接静态库文件的各个对象与应用程序之间的区别是什么?
答案 0 :(得分:2)
我认为它应该是:
g++ *.o -L. -lboost_regex-gcc -o sairay.out -static
答案 1 :(得分:0)
您显然忘记了包含定义main
功能的应用程序的目标文件。也许您输入g++ myapp.cpp
而不是g++ -c myapp.cpp
(实际上已经创建了一个目标文件而不是已经准备好的链接二进制文件)?
静态库实际上只不过是一个包含许多或少数目标文件的存档(由ar
实用程序存档),附带符号表索引以便快速查找。因此,如果您在链接中手动包含目标文件,我认为它基本上是相同的。
尝试以下操作以查看其包含的目标文件
ar tv libboost_regex-gcc-1_37.a