【发布时间】:2012-08-13 18:14:19
【问题描述】:
我正在尝试用 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 ___
【问题讨论】:
-
我将链接行更改为
g++-4.7 -shared -ldl -fPIC -rdynamic -g -O3 -pthread -Wall -Wextra -Werror -fnon-call-exceptions -std=gnu++11 -o ___.so ___,我认为它可以工作。
标签: c++ linux apache c++11 shared-libraries