我正在尝试用 C++ 编写一个 apache 模块。
基本模块在.so中编译和链接很好。当我将它附加到服务器时,一切正常。
直到我尝试使用 std::string。现在我收到以下错误:
Cannot load mod_foo.so into server:
/usr/lib/apache2/modules/mod_foo.so: undefined symbol:
_ZNSs4_Rep20_S_empty_rep_storageE
我假设这个符号是标准库中 std::string 使用的东西的错位版本。无论如何在编译或 .so 链接时添加一个选项来指示 .so 需要这个库?
我编译我的 .o 文件如下:
g++-4.7 -fpic -c -O3 -pthread -g -iquote .
-I/usr/include/apache2 -I/usr/include/apr-1.0 -Wall -Wextra
-Werror -Wno-unknown-pragmas -fnon-call-exceptions
-std=gnu++11 -x c++ -o ___.o ___
并链接 .so 如下:
ld -Bshareable -o ___.so ___