2017-07-11 51 views
0

背景: 我有AWS Lambda運行nodejs 6.10。對於我的代碼,我需要有一個C庫來運行算法。這是由我的機器上的node-gyp編譯的。使用稍舊版本的GLIBCXX

我的buildserver是一個過時的ubuntu 14.04,我在其上運行我的node-gyp編譯代碼,並且所有內容都按預期工作。

現在,我已將我的ubuntu更新到17.04版本。這似乎給我Version of GLIBCXX

我已經跑雲集GLIBCXX在不同環境下的版本問題

  1. /sbin目錄/ -p LDCONFIG | grep stdC++
  2. (使用1的路徑)strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep LIBCXX

在這裏您可以看到,在Ubuntu 17.04上,GLIBCXX從v3.4到3.4.22都可用,其他環境只有3.4.19。在Ubuntu 17.04編譯

我的代碼是尋找GLIBCXX_3.4.21這不適用於以下錯誤

"errorMessage": "/var/lang/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /var/task/addon.node)", 

請求運行環境和結果:有沒有通過任何方法(除使用自定義docker /回到舊版本的ubuntu等),我可以設置編譯器使用GLIBCXX_3.4.19,當環境(AWS lambda支持最新版本?)時,我最終可以改變它。理想情況下,我正在尋找一個編譯器標誌,我可以在機器上永久設置或通過node-gyp來傳遞,這樣我就可以使用正確的版本。

觀察:即使我有GLIBCXX_3.4.22它只是linkling GLIBCXX_3.4.21(?或者它們是向後兼容)

+0

相關帖子:https://stackoverflow.com/questions/38446439/linux-running-executable-error-glibcxx-3-4-21-not-found?noredirect=1&lq=1 – agfkhj11

+0

相關帖子:https:///stackoverflow.com/questions/4133674/glibcxx-versions – agfkhj11

+0

找到這個信息https://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths它可以幫助你設置LD路徑,但完全不確定如何使用node-gyp – agfkhj11

回答

0

有沒有什麼方法,通過它(比使用自定義碼頭工人等/去回到舊版本的ubuntu等),我可以設置編譯器使用GLIBCXX_3.4.19,當環境(AWS lambda支持最新版本?)時,我最終可以更改它。理想情況下,我正在尋找一個編譯器標誌,我可以在機器上永久設置或通過node-gyp來傳遞,這樣我就可以使用正確的版本。

您可以在Ubuntu 17.04上安裝earlier version of g++並使用該工具鏈來編譯您的軟件。 g ++ - 4.7可以工作,但我不確定。檢查當前生成機器上的版本。如果你願意,你甚至可以將這個較舊的編譯器放在一個容器中,但這不是必需的。

即使我有GLIBCXX_3.4.22它只是linkling GLIBCXX_3.4.21(或它們是向後兼容的?)

這些符號的意義就在於有一個明確的指定方式ABI不兼容。你只是碰巧不使用GLIBCXX_3.4.22引入的任何更改,但是使用由GLOBCXX_3.4.21(由所使用的任何編譯器編譯時)編譯的 引入的更改。