2016-09-14 1 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)スクリプトを試すことができます。 'CMakeCXXCompiler.cmake'にキャッシュされる前に' CMAKE_CXX_IMPLICIT_LINK_LIBRARIES'を修正することができます。例については、[here](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:TEST.CPPため

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++) 

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

関連する問題