2016-09-14 31 views
0

我正在嘗試構建一些第三方代碼,並將其與我們自己的STLPort私有版本鏈接起來,它們的代碼使用CMake,我對它很陌生。從CMake中刪除libstdC++構建

我能夠使編譯工作對抗我們的STLPort包括,但我不能停止鏈接器鏈接在libstdC++。我試過了:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -nostdlib") 
list(REMOVE_ITEM CMAKE_CXX_IMPLICIT_LINK_LIBRARIES stdc++) 

但沒有運氣。

Amazon Linux AMI(基於RHEL 5.x),CMake 2.8.12。

建議/指針將不勝感激。

謝謝。

+1

您可以嘗試['CMAKE_USER_MAKE_RULES_OVERRIDE'](https://cmake.org/cmake/help/latest/variable/CMAKE_USER_MAKE_RULES_OVERRIDE.html)腳本。在那裏你可以修改'CMAKE_CXX_IMPLICIT_LINK_LIBRARIES',然後將它緩存到'CMakeCXXCompiler.cmake'中。看一個例子[這裏](http://stackoverflow.com/questions/28732209/change-default-value-of-cmake-cxx-flags-debug-and-friends-in-cmake)。 – Florian

+0

這是試點錯誤。正如我在下面提到的那樣,CMake文件很大,STLPort定義中存在隱藏/屏蔽錯誤,導致問題遠離定義。 'set(CMAKE_EXE_LINKER_FLAGS「$ {CMAKE_EXE_LINKER_FLAGS} -nostdlib」)'是所有必需的 –

回答

0

我相信你的構建腳本中有更多的邏輯。

下面的CMakeLists.txt:

cmake_minimum_required (VERSION 2.6) 
project (Test) 
add_executable(Test test.cpp) 

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -nostdlib") 
list(REMOVE_ITEM CMAKE_CXX_IMPLICIT_LINK_LIBRARIES stdc++) 

爲TEST.CPP:

int main() 
{ 
     return 0; 
} 

產生預期的連接器警告:

/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400144 

什麼意思,我的二進制文件並非對鏈接STDLIB。

我相信你應該提供關於你的構建過程的更多細節。

+0

是的,構建腳本長達數百行,分佈在多個子目錄中,並用bash腳本預處理......有點太多對於SO :-) –

+0

我懷疑這些變量只是被其他一些腳本覆蓋。 嘗試使用CMAKE_EXE_LINKER_FLAGS和CMAKE_CXX_IMPLICIT_LINK_LIBRARIES來源的grep – woockashek