2016-09-14 4 views
0

Я пытаюсь создать некоторый сторонний код и связать его с нашей собственной частной версией STLPort, их код использует CMake, и я новичок в нем.Удалить libstdC++ из сборки CMake

Я могу заставить компилятор работать против нашего 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 ... слишком много for SO :-) –

+0

Я подозреваю, что эти переменные просто перезаписаны другим скриптом. Попробуйте использовать grep для источников CMAKE_EXE_LINKER_FLAGS и CMAKE_CXX_IMPLICIT_LINK_LIBRARIES – woockashek

Смежные вопросы