C++ 链接boost正则表达式的两种方法出错

C++ 链接boost正则表达式的两种方法出错,c++,regex,boost,linker,C++,Regex,Boost,Linker,我知道boost regex静态库是通过归档单个对象文件使用ar实用程序创建的 我使用gcc中的-l选项链接了boost正则表达式库。这很有效 g++ *.o libboost_regex-gcc-1_37.a -o sairay.out 我单独编译了boostregex源文件,然后尝试将我的应用程序的目标文件和boostregex的目标文件链接到单个可执行文件中。但现在我犯了错误 g++ *.o -o sairay.out Undefined

我知道boost regex静态库是通过归档单个对象文件使用ar实用程序创建的

我使用gcc中的-l选项链接了boost正则表达式库。这很有效

g++ *.o libboost_regex-gcc-1_37.a -o sairay.out
我单独编译了boostregex源文件,然后尝试将我的应用程序的目标文件和boostregex的目标文件链接到单个可执行文件中。但现在我犯了错误

  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

我想知道链接静态库和将静态库文件的各个对象与应用程序链接有什么区别

您显然忘记了包含应用程序的目标文件,该文件定义了
main
函数。也许您键入了
g++myapp.cpp
而不是
g++-c myapp.cpp
(实际上是为了创建一个对象文件,而不是一个已经链接好的二进制文件)

静态库实际上只不过是许多或少数对象文件(由
ar
实用程序存档)的存档,并附带符号表索引以进行快速查找。因此,如果您在链接中手动包含对象文件,我认为基本上也是这样

请尝试以下操作以查看它包含的对象文件

ar tv libboost_regex-gcc-1_37.a

我想应该是:

g++ *.o -L. -lboost_regex-gcc -o sairay.out -static

对不起,我错过了你的第一句话。但你似乎已经明白发生了什么。请仔细检查包含您的主函数的对象文件是否也被链接。我认为您分别输入了gcc和-l作为编译器/选项,但这并没有反映在您的命令中。你所做的哪一个是正确的?