【问题标题】:How to compile and link a C/C++ shared object library in the right way? [duplicate]如何以正确的方式编译和链接 C/C++ 共享对象库? [复制]
【发布时间】:2014-08-01 08:46:48
【问题描述】:

我开发了一个 C++ 类,它读取一个文本文件并将一些信息存储在 provate 变量中。为了解析文件,我使用了正则表达式库。在编译过程中出现我无法理解的错误。 首先,我为我的班级制作了一个共享对象库。之后我尝试编译测试程序。这里出现错误:未定义的对 std::regex_iterator 的引用...

我在 unix 机器上使用以下命令进行编译:

g++ -c -fpic -m64 -std=c++11 Foo.h Foo.cpp

g++ -shared -m64 -std=c++11 -o libFoo.so Foo.o

g++ -m64 -std=c++11 -I. -L. -lFoo -o camelTest Foo.h main.cpp

为了重现错误,这里有一个小例子: example

提前感谢您的帮助

【问题讨论】:

  • 你确定你的 C++ 库支持正则表达式吗?
  • 您需要使用 GCC 4.9 才能获得<regex> 支持
  • 您使用的是哪个版本的 GCC? GCC 直到最近才支持标准库中的正则表达式。
  • 试试 Boost.Regex 或 Boost.Xpressive。
  • 我不知道 C++ 是否支持正则表达式,但我认为是的。当我在最后一个命令中不包含 Foo.h 时也会发生错误。

标签: c++ regex shared-libraries fpic


【解决方案1】:

g++ -m64 -std=c++11 -I. -L. -lFoo -o camelTest Foo.h main.cpp -L%PATH_TO_USED_LIB% -l%NAME_OF_LIB%

如果你的库是 libregexp,那么%NAME_OF_LIB% == regexp

想法是:

标记-L(大写)告诉gcc 哪里你的库。

标志l(小写)告诉gcc 哪个库应该gcc链接到你的应用程序。

【讨论】:

  • 我认为正则表达式库位于 LD_LIBRARY_PATH 中。
  • 你使用的是哪个版本的 gcc?
  • 如果您的 gcc 版本低于 4.9.0 则存在错误(正则表达式功能实现:gcc.gnu.org/bugzilla/show_bug.cgi?id=53631
猜你喜欢
  • 2018-07-05
  • 2018-05-30
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多