【问题标题】:Error with two ways of linking boost regex两种链接 boost 正则表达式的方法出错
【发布时间】:2009-03-06 02:44:55
【问题描述】:

我了解 boost regex 静态库是使用 ar 实用程序通过归档各个目标文件来创建的。

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

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

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

【问题讨论】:

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

标签: c++ regex boost linker


【解决方案1】:

我认为应该是:

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

【讨论】:

    【解决方案2】:

    您显然忘记包含定义main 函数的应用程序的目标文件。也许您输入了g++ myapp.cpp 而不是g++ -c myapp.cpp(实际上是创建一个目标文件而不是一个现成的链接二进制文件)?

    一个静态库实际上不仅仅是一个包含许多或几个目标文件的存档(由ar 实用程序存档),并附加了一个符号表索引以便快速查找。因此,如果您在链接中手动包含目标文件,我认为它的作用基本相同。

    尝试以下操作来查看它包含的目标文件

    ar tv libboost_regex-gcc-1_37.a
    

    【讨论】:

      猜你喜欢
      • 2013-07-09
      • 1970-01-01
      • 2020-06-17
      • 2016-01-13
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2019-05-31
      相关资源
      最近更新 更多