![](/img/trans.png)
[英]Cython compiled ok, but Symbol not found: __ZNSs4_Rep20_S_empty_rep_storageE when running on Mac OS
[英]C++ Apache Module: Fails on `_ZNSs4_Rep20_S_empty_rep_storageE`
我正在嘗試用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 ___
您需要鏈接-lstdc++
使用g++
鏈接(而不是gcc
或ld
)自動完成。
請參閱GCC手冊中的編譯C ++程序 :
但是,使用
gcc
不會添加C ++庫。g++
是一個調用GCC [...]並自動指定與C ++庫鏈接的程序。
NB選項-Wall -Wextra -Werror -fnon-call-exceptions -std=gnu++11
在鏈接時無效,這些選項僅影響編譯階段,在鏈接階段被忽略。 在鏈接期間,GCC只調用鏈接器並僅傳遞對鏈接有效的選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.