簡體   English   中英

C ++ Apache模塊:在_ _ZNSs4_Rep20_S_empty_rep_storageE上失敗

[英]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++鏈接(而不是gccld )自動完成。

請參閱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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM