2011-08-18 6 views
3

내 프로그램은 giblib 및 Imlib2 라이브러리를 사용하며 cmake로 작성되었습니다.cmake를 사용하여 독립 실행 형 프로그램을 만들고 싶습니다.

내 컴퓨터에서는 완벽하게 작동하지만 다른 컴퓨터에서는 작동하지 않습니다.

나는 내 프로그램이 필요로하는 모든 라이브러리를 설치했지만 다른 라이브러리는 설치하지 않는다고 생각합니다.

내 목표는 독립 실행 형 프로그램을 만드는 것입니다. (다른 라이브러리를 추가로 설치하지 않아도됩니다.)

cmake 파일에는 무엇을 추가해야합니까?

:

projectDef.cmake 소스 코드

file (GLOB PLATFORM RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} 
    X11/[^.]*.cpp 
    X11/[^.]*.h 
    X11/[^.]*.cmake 
    ) 

SOURCE_GROUP(X11 FILES ${PLATFORM}) 

add_definitions(
) 

set (SOURCES 
    ${SOURCES} 
    ${PLATFORM} 
    ) 

add_x11_plugin(${PROJECT_NAME} SOURCES) 

target_link_libraries(${PROJECT_NAME} 
    ${PLUGIN_INTERNAL_DEPS} 
    ) 

include_directories(/usr/include/giblib) 
include_directories(/usr/include/X11) 

target_link_libraries(MyProject X11) 
target_link_libraries(MyProject Imlib2) 
target_link_libraries(MyProject giblib) 

CMakeList.txt 소스 코드

cmake_minimum_required (VERSION 2.6) 
set (CMAKE_BACKWARDS_COMPATIBILITY 2.6) 
set(BUILD_SHARED_LIBS OFF) 
set(CMAKE_EXE_LINKER_FLAGS "-static") 

Project(${PLUGIN_NAME}) 

file (GLOB GENERAL RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} 
    [^.]*.cpp 
    [^.]*.h 
    [^.]*.cmake 
    ) 

include_directories(${PLUGIN_INCLUDE_DIRS}) 


SET_SOURCE_FILES_PROPERTIES(
    ${GENERATED} 
    PROPERTIES 
     GENERATED 1 
    ) 

SOURCE_GROUP(Generated FILES 
    ${GENERATED} 
    ) 

SET(SOURCES 
    ${GENERAL} 
    ${GENERATED} 
    ) 

include_platform() 

+0

http://stackoverflow.com/questions/3762057/cmake-how-to-produce-binaries-as-static-as-possible? – Lalaland

답변

1

루트 CMakeLists.txt에서이 옵션을 시작하십시오

set(BUILD_SHARED_LIBS OFF) 
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-static") 

BUILD_SHARED_LIBS 프로젝트에 자체 라이브러리 (add_library)가있는 경우에만 필요합니다.

-static 링커 플래그를 사용하면 모든 추가 라이브러리에 대한 정적 라이브러리가 필요합니다. 정적 링크를 사용할 때 공통적으로 발생하는 한 가지 문제는 circular dependencies이 아닙니다.

+0

솔루션을 반복 한 후에 결과 .so 파일의 크기는 변경되지 않습니다. 네가 말했듯이 그것이 제대로 작동하지 않는다고 생각한다. – Oz6848

+0

그리고 'make'결과 메시지의 끝 부분에 'CXX 공유 라이브러리 ../../bin/Printmade2/npMyProject.so'링크가있어 정적 동적 링크라고 생각하지 않습니다. – Oz6848

+0

새로운 out-of-source 빌드 디렉토리를 사용해 보셨습니까? BTW 정적 라이브러리의 접미어 .a not .so ... – Lars

관련 문제