2013-09-04 68 views
5

Tôi đang cố cài đặt trình điều khiển cho NOVINT Falcon có tên là libnifalcon. Tôi đã sử dụng cmake để tạo một tệp, nhưng khi tôi chạy làm cho tôi nhận được lỗi:Chỉnh sửa CMakeLists.txt để biên dịch với -fPIC

Linking CXX shared library ../../lib/libnifalcon_cli_base.so 
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libboost_program_options-mt.a(cmdline.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libboost_program_options-mt.a: could not read symbols: Bad value 
collect2: ld returned 1 exit status 
make[2]: ** [lib/libnifalcon_cli_base.so.1.0.1] Error 1 
make[1]: ** [src/util/CMakeFiles/nifalcon_cli_base_SHARED.dir/all] Error 2 
make: *** [all] Error 2 

Tôi đã thử nhiều kỹ thuật để biên dịch usinf -fPIC nhưng không có tác dụng nào. Bất cứ ai có thể cho tôi biết nơi trong makefile, và những gì để viết để biên dịch bằng cách sử dụng -fPIC?

Các makefile là:

  # CMAKE generated file: DO NOT EDIT! 
      # Generated by "Unix Makefiles" Generator, CMake Version 2.8 

      # Default target executed when no arguments are given to make. 
      default_target: all 
      .PHONY : default_target 

      #============================================================================= 
      # Special targets provided by cmake. 

      # Disable implicit rules so canonical targets will work. 
      .SUFFIXES: 

      # Remove some rules from gmake that .SUFFIXES does not remove. 
      SUFFIXES = 

      .SUFFIXES: .hpux_make_needs_suffix_list 

      # Suppress display of executed commands. 
      $(VERBOSE).SILENT: 

      # A target that is always out of date. 
      cmake_force: 
      .PHONY : cmake_force 

      #============================================================================= 
      # Set environment variables for the build. 

      # The shell in which to execute make rules. 
      #SHELL = /bin/sh 

      # The CMake executable. 
      CMAKE_COMMAND = /usr/bin/cmake 

      # The command to remove a file. 
      RM = /usr/bin/cmake -E remove -f 

      # The program to use to edit the cache. 
      CMAKE_EDIT_COMMAND = /usr/bin/ccmake 

      # The top-level source directory on which CMake was run. 
      CMAKE_SOURCE_DIR = /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1 

      # The top-level build directory on which CMake was run. 
      CMAKE_BINARY_DIR = /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1/linux 

      #============================================================================= 
      # Targets provided globally by CMake. 

      # Special rule for the target edit_cache 
      edit_cache: 
       @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." 
       /usr/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) 
      .PHONY : edit_cache 

      # Special rule for the target edit_cache 
      edit_cache/fast: edit_cache 
      .PHONY : edit_cache/fast 

      # Special rule for the target install 
      install: preinstall 
       @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." 
       /usr/bin/cmake -P cmake_install.cmake 
      .PHONY : install 

      # Special rule for the target install 
      install/fast: preinstall/fast 
       @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." 
       /usr/bin/cmake -P cmake_install.cmake 
      .PHONY : install/fast 

      # Special rule for the target install/local 
      install/local: preinstall 
       @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." 
       /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake 
      .PHONY : install/local 

      # Special rule for the target install/local 
      install/local/fast: install/local 
      .PHONY : install/local/fast 

      # Special rule for the target install/strip 
      install/strip: preinstall 
       @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." 
       /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake 
      .PHONY : install/strip 

      # Special rule for the target install/strip 
      install/strip/fast: install/strip 
      .PHONY : install/strip/fast 

      # Special rule for the target list_install_components 
      list_install_components: 
       @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" 
      .PHONY : list_install_components 

      # Special rule for the target list_install_components 
      list_install_components/fast: list_install_components 
      .PHONY : list_install_components/fast 

      # Special rule for the target rebuild_cache 
      rebuild_cache: 
       @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." 
       /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) 
      .PHONY : rebuild_cache 

      # Special rule for the target rebuild_cache 
      rebuild_cache/fast: rebuild_cache 
      .PHONY : rebuild_cache/fast 

      # The main all target 
      all: cmake_check_build_system 
       $(CMAKE_COMMAND) -E cmake_progress_start /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1/linux/CMakeFiles /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1/linux/CMakeFiles/progress.marks 
       $(MAKE) -f CMakeFiles/Makefile2 all 
       $(CMAKE_COMMAND) -E cmake_progress_start /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1/linux/CMakeFiles 0 
      .PHONY : all 

      # The main clean target 
      clean: 
       $(MAKE) -f CMakeFiles/Makefile2 clean 
      .PHONY : clean 

      # The main clean target 
      clean/fast: clean 
      .PHONY : clean/fast 

      # Prepare targets for installation. 
      preinstall: all 
       $(MAKE) -f CMakeFiles/Makefile2 preinstall 
      .PHONY : preinstall 

      # Prepare targets for installation. 
      preinstall/fast: 
       $(MAKE) -f CMakeFiles/Makefile2 preinstall 
      .PHONY : preinstall/fast 

      # clear depends 
      depend: 
       $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 
      .PHONY : depend 

      #============================================================================= 
      # Target rules for targets named nifalcon_DEPEND 

      # Build rule for target. 
      nifalcon_DEPEND: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 nifalcon_DEPEND 
      .PHONY : nifalcon_DEPEND 

      # fast build rule for target. 
      nifalcon_DEPEND/fast: 
       $(MAKE) -f src/CMakeFiles/nifalcon_DEPEND.dir/build.make src/CMakeFiles/nifalcon_DEPEND.dir/build 
      .PHONY : nifalcon_DEPEND/fast 

      #============================================================================= 
      # Target rules for targets named nifalcon_SHARED 

      # Build rule for target. 
      nifalcon_SHARED: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 nifalcon_SHARED 
      .PHONY : nifalcon_SHARED 

      # fast build rule for target. 
      nifalcon_SHARED/fast: 
       $(MAKE) -f src/CMakeFiles/nifalcon_SHARED.dir/build.make src/CMakeFiles/nifalcon_SHARED.dir/build 
      .PHONY : nifalcon_SHARED/fast 

      #============================================================================= 
      # Target rules for targets named nifalcon_STATIC 

      # Build rule for target. 
      nifalcon_STATIC: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 nifalcon_STATIC 
      .PHONY : nifalcon_STATIC 

      # fast build rule for target. 
      nifalcon_STATIC/fast: 
       $(MAKE) -f src/CMakeFiles/nifalcon_STATIC.dir/build.make src/CMakeFiles/nifalcon_STATIC.dir/build 
      .PHONY : nifalcon_STATIC/fast 

      #============================================================================= 
      # Target rules for targets named nifalcon_cli_base_DEPEND 

      # Build rule for target. 
      nifalcon_cli_base_DEPEND: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 nifalcon_cli_base_DEPEND 
      .PHONY : nifalcon_cli_base_DEPEND 

      # fast build rule for target. 
      nifalcon_cli_base_DEPEND/fast: 
       $(MAKE) -f src/util/CMakeFiles/nifalcon_cli_base_DEPEND.dir/build.make src/util/CMakeFiles/nifalcon_cli_base_DEPEND.dir/build 
      .PHONY : nifalcon_cli_base_DEPEND/fast 

      #============================================================================= 
      # Target rules for targets named nifalcon_cli_base_SHARED 

      # Build rule for target. 
      nifalcon_cli_base_SHARED: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 nifalcon_cli_base_SHARED 
      .PHONY : nifalcon_cli_base_SHARED 

      # fast build rule for target. 
      nifalcon_cli_base_SHARED/fast: 
       $(MAKE) -f src/util/CMakeFiles/nifalcon_cli_base_SHARED.dir/build.make src/util/CMakeFiles/nifalcon_cli_base_SHARED.dir/build 
      .PHONY : nifalcon_cli_base_SHARED/fast 

      #============================================================================= 
      # Target rules for targets named nifalcon_cli_base_STATIC 

      # Build rule for target. 
      nifalcon_cli_base_STATIC: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 nifalcon_cli_base_STATIC 
      .PHONY : nifalcon_cli_base_STATIC 

      # fast build rule for target. 
      nifalcon_cli_base_STATIC/fast: 
       $(MAKE) -f src/util/CMakeFiles/nifalcon_cli_base_STATIC.dir/build.make src/util/CMakeFiles/nifalcon_cli_base_STATIC.dir/build 
      .PHONY : nifalcon_cli_base_STATIC/fast 

      #============================================================================= 
      # Target rules for targets named nifalcon_device_boost_thread_DEPEND 

      # Build rule for target. 
      nifalcon_device_boost_thread_DEPEND: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 nifalcon_device_boost_thread_DEPEND 
      .PHONY : nifalcon_device_boost_thread_DEPEND 

      # fast build rule for target. 
      nifalcon_device_boost_thread_DEPEND/fast: 
       $(MAKE) -f src/util/CMakeFiles/nifalcon_device_boost_thread_DEPEND.dir/build.make src/util/CMakeFiles/nifalcon_device_boost_thread_DEPEND.dir/build 
      .PHONY : nifalcon_device_boost_thread_DEPEND/fast 

      #============================================================================= 
      # Target rules for targets named nifalcon_device_boost_thread_SHARED 

      # Build rule for target. 
      nifalcon_device_boost_thread_SHARED: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 nifalcon_device_boost_thread_SHARED 
      .PHONY : nifalcon_device_boost_thread_SHARED 

      # fast build rule for target. 
      nifalcon_device_boost_thread_SHARED/fast: 
       $(MAKE) -f src/util/CMakeFiles/nifalcon_device_boost_thread_SHARED.dir/build.make src/util/CMakeFiles/nifalcon_device_boost_thread_SHARED.dir/build 
      .PHONY : nifalcon_device_boost_thread_SHARED/fast 

      #============================================================================= 
      # Target rules for targets named nifalcon_device_boost_thread_STATIC 

      # Build rule for target. 
      nifalcon_device_boost_thread_STATIC: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 nifalcon_device_boost_thread_STATIC 
      .PHONY : nifalcon_device_boost_thread_STATIC 

      # fast build rule for target. 
      nifalcon_device_boost_thread_STATIC/fast: 
       $(MAKE) -f src/util/CMakeFiles/nifalcon_device_boost_thread_STATIC.dir/build.make src/util/CMakeFiles/nifalcon_device_boost_thread_STATIC.dir/build 
      .PHONY : nifalcon_device_boost_thread_STATIC/fast 

      #============================================================================= 
      # Target rules for targets named barrow_mechanics 

      # Build rule for target. 
      barrow_mechanics: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 barrow_mechanics 
      .PHONY : barrow_mechanics 

      # fast build rule for target. 
      barrow_mechanics/fast: 
       $(MAKE) -f examples/CMakeFiles/barrow_mechanics.dir/build.make examples/CMakeFiles/barrow_mechanics.dir/build 
      .PHONY : barrow_mechanics/fast 

      #============================================================================= 
      # Target rules for targets named falcon_led 

      # Build rule for target. 
      falcon_led: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 falcon_led 
      .PHONY : falcon_led 

      # fast build rule for target. 
      falcon_led/fast: 
       $(MAKE) -f examples/CMakeFiles/falcon_led.dir/build.make examples/CMakeFiles/falcon_led.dir/build 
      .PHONY : falcon_led/fast 

      #============================================================================= 
      # Target rules for targets named falcon_test_cli 

      # Build rule for target. 
      falcon_test_cli: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 falcon_test_cli 
      .PHONY : falcon_test_cli 

      # fast build rule for target. 
      falcon_test_cli/fast: 
       $(MAKE) -f examples/CMakeFiles/falcon_test_cli.dir/build.make examples/CMakeFiles/falcon_test_cli.dir/build 
      .PHONY : falcon_test_cli/fast 

      #============================================================================= 
      # Target rules for targets named findfalcons 

      # Build rule for target. 
      findfalcons: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 findfalcons 
      .PHONY : findfalcons 

      # fast build rule for target. 
      findfalcons/fast: 
       $(MAKE) -f examples/CMakeFiles/findfalcons.dir/build.make examples/CMakeFiles/findfalcons.dir/build 
      .PHONY : findfalcons/fast 

      #============================================================================= 
      # Target rules for targets named findfalcons_multi 

      # Build rule for target. 
      findfalcons_multi: cmake_check_build_system 
       $(MAKE) -f CMakeFiles/Makefile2 findfalcons_multi 
      .PHONY : findfalcons_multi 

      # fast build rule for target. 
      findfalcons_multi/fast: 
       $(MAKE) -f examples/CMakeFiles/findfalcons_multi.dir/build.make examples/CMakeFiles/findfalcons_multi.dir/build 
      .PHONY : findfalcons_multi/fast 

      # Help Target 
      help: 
       @echo "The following are some of the valid targets for this Makefile:" 
       @echo "... all (the default if no target is provided)" 
       @echo "... clean" 
       @echo "... depend" 
       @echo "... edit_cache" 
       @echo "... install" 
       @echo "... install/local" 
       @echo "... install/strip" 
       @echo "... list_install_components" 
       @echo "... rebuild_cache" 
       @echo "... nifalcon_DEPEND" 
       @echo "... nifalcon_SHARED" 
       @echo "... nifalcon_STATIC" 
       @echo "... nifalcon_cli_base_DEPEND" 
       @echo "... nifalcon_cli_base_SHARED" 
       @echo "... nifalcon_cli_base_STATIC" 
       @echo "... nifalcon_device_boost_thread_DEPEND" 
       @echo "... nifalcon_device_boost_thread_SHARED" 
       @echo "... nifalcon_device_boost_thread_STATIC" 
       @echo "... barrow_mechanics" 
       @echo "... falcon_led" 
       @echo "... falcon_test_cli" 
       @echo "... findfalcons" 
       @echo "... findfalcons_multi" 
      .PHONY : help 



      #============================================================================= 
      # Special targets to cleanup operation of make. 

      # Special rule to run CMake to check the build system integrity. 
      # No rule that depends on this can have commands that come from listfiles 
      # because they might be regenerated. 
      cmake_check_build_system: 
       $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 
      .PHONY : cmake_check_build_system 

Nhờ sự giúp đỡ của bạn -Michael

EDIT: Theo đề xuất, tôi đã cố gắng sửa đổi CMakeLists.txt thay cho makefiles nó tạo ra. Tôi vẫn gặp sự cố tương tự, vì vậy, đây là CMakeLists.txt:

  ###################################################################################### 
      # CMake directives 
      ###################################################################################### 

      #Require 2.6 or higher. 
      CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR) 

      #See if we've got our cmake modules checked out. If not, advise to do so. 
      IF(EXISTS "${CMAKE_SOURCE_DIR}/../compily_buildd/cmake") 
       SET(BUILDSYS_CMAKE_DIR "${CMAKE_SOURCE_DIR}/../compily_buildd/cmake") 
       MESSAGE(STATUS "Using outside compily_buildd directory ${BUILDSYS_CMAKE_DIR}") 
      ELSEIF(EXISTS "${CMAKE_SOURCE_DIR}/compily_buildd/cmake") 
       SET(BUILDSYS_CMAKE_DIR "${CMAKE_SOURCE_DIR}/compily_buildd/cmake") 
       MESSAGE(STATUS "Using compily_buildd git submodule ${BUILDSYS_CMAKE_DIR}") 
      ELSE(EXISTS "${CMAKE_SOURCE_DIR}/compily_buildd/cmake") 
       MESSAGE(FATAL_ERROR 
       "Cannot find compily_buildd directory for np labs project compilation functions.\n" 
       "Make sure you've either put the compily_buildd directory in the same root as your repository directory, or that you've used the compily_buildd submodule (git submodule update --init).\n" 
       "NP Labs build repository is available at git://github.com/qdot/compily_buildd.git" 
       ) 
      ENDIF(EXISTS "${CMAKE_SOURCE_DIR}/../compily_buildd/cmake") 

      LIST(APPEND CMAKE_MODULE_PATH ${BUILDSYS_CMAKE_DIR}) 

      INCLUDE(${BUILDSYS_CMAKE_DIR}/BuildSysCMakeLib.cmake) 

      #setting link directory policy 

      IF(COMMAND cmake_policy) 
       CMAKE_POLICY(SET CMP0003 NEW) 
      ENDIF(COMMAND cmake_policy) 

      ###################################################################################### 
      # Project declaration and options 
      ###################################################################################### 

      #Project declaration 

      PROJECT(LIBNIFALCON) 
      set(CMAKE_C_COMPILER "gcc") 
      set(CMAKE_CXX_COMPILER "g++") 
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC" ) 
      INITIALIZE_BUILD() 

      #Common Options 

      OPTION_LIBRARY_BUILD_STATIC(ON) 
      #We can't build shared on MSVC yet 
      IF(NOT MSVC) 
       OPTION_LIBRARY_BUILD_SHARED(ON) 
      ENDIF(NOT MSVC) 
      OPTION_FAST_MATH(ON) 
      OPTION_ARCH_OPTS(ON) 
      OPTION_GPROF(OFF) 
      #OPTION_LOG4CXX(OFF LIBNIFALCON_REQ_LIBS) 
      #OPTION_CREATE_VERSION_FILE(ON "${CMAKE_CURRENT_SOURCE_DIR}/src/version.cc") 

      #Project specific options 

      OPTION(FORCE_FTD2XX_BUILD "Force building FTD2XX libraries on non-windows platforms" OFF) 
      OPTION(STATIC_LINK_SUFFIXES "Add a symbolic link with [library_name]_s on static libraries (for ease in building staticly linked binaries under gcc)" OFF) 
      OPTION(BUILD_SWIG_BINDINGS "Build Java/Python bindings for libnifalcon" OFF) 
      OPTION(BUILD_EXAMPLES "Build libnifalcon examples" ON) 

      ###################################################################################### 
      # Project specific package finding 
      ###################################################################################### 

      #Find communications libraries 
      IF(WIN32 OR FORCE_FTD2XX_BUILD) 
       FIND_PACKAGE(libftd2xx) 
       IF(LIBFTD2XX_FOUND) 
       INCLUDE_DIRECTORIES(${LIBFTD2XX_INCLUDE_DIRS}) 
       SET(LIBNIFALCON_REQ_LIBS ${LIBFTD2XX_LIBRARIES}) 
       ENDIF(LIBFTD2XX_FOUND) 
      ENDIF(WIN32 OR FORCE_FTD2XX_BUILD) 

      IF(NOT LIBFTD2XX_FOUND) 
       FIND_PACKAGE(libusb-1.0) 
       IF(LIBUSB_1_FOUND) 
       INCLUDE_DIRECTORIES(${LIBUSB_1_INCLUDE_DIRS}) 
       SET(LIBNIFALCON_REQ_LIBS ${LIBUSB_1_LIBRARIES}) 
       ENDIF(LIBUSB_1_FOUND) 
      ENDIF(NOT LIBFTD2XX_FOUND) 

      IF(NOT LIBFTD2XX_FOUND AND NOT LIBUSB_1_FOUND) 
       MESSAGE(FATAL_ERROR "Either ftd2xx or libusb-1.0 is required to build libnifalcon. Check the README file for info.") 
      ENDIF(NOT LIBFTD2XX_FOUND AND NOT LIBUSB_1_FOUND) 

      #Find boost, used all over the place 
      SET(Boost_USE_MULTITHREADED ON) 
      SET(Boost_USE_STATIC_LIBS ON) 

      FIND_PACKAGE(Boost REQUIRED) 
      IF(NOT Boost_FOUND) 
       MESSAGE(FATAL_ERROR "libnifalcon requires a minimum of the Boost 1.33 headers to build") 
      ENDIF(NOT Boost_FOUND) 

      FIND_PACKAGE(Boost COMPONENTS program_options thread) 

      ###################################################################################### 
      # Project specific globals 
      ###################################################################################### 

      #library definitions 

      SET(LIBNIFALCON_MAJOR_VERSION 1) 
      SET(LIBNIFALCON_MINOR_VERSION 0) 
      SET(LIBNIFALCON_BUILD_VERSION 1) 

      # BUILDSYS_CPACK_INFO(
      # NAME "libnifalcon" 
      # MAJOR_VERSION ${LIBNIFALCON_MAJOR_VERSION} 
      # MINOR_VERSION ${LIBNIFALCON_MINOR_VERSION} 
      # BUILD_VERSION ${LIBNIFALCON_BUILD_VERSION} 
      # VENDOR "Nonpolynomial Labs" 
      # DESCRIPTION "Open Source Driver for the Novint Falcon Haptic Controller" 
      # ) 
      # INCLUDE(CPack) 

      SET(LIBNIFALCON_VERSION ${LIBNIFALCON_MAJOR_VERSION}.${LIBNIFALCON_MINOR_VERSION}.${LIBNIFALCON_BUILD_VERSION}) 

      #library name definitions 

      CREATE_LIBRARY_LINK_NAME(nifalcon) 
      CREATE_LIBRARY_LINK_NAME(nifalcon_cli_base) 
      CREATE_LIBRARY_LINK_NAME(nifalcon_device_boost_thread) 

      SET(LIBNIFALCON_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/include") 

      INCLUDE_DIRECTORIES(${LIBNIFALCON_INCLUDE_DIR} ${Boost_INCLUDE_DIRS}) 
      LINK_DIRECTORIES(${LIBRARY_OUTPUT_PATH}) 

      #If we build libusb staticly on apple, we need the proper frameworks 
      IF(BUILD_STATIC AND APPLE) 
       LIST(APPEND LIBNIFALCON_EXE_LINK_LIBS "-framework IOKit" "-framework CoreFoundation") 
      ENDIF(BUILD_STATIC AND APPLE) 

      LIST(APPEND LIBNIFALCON_EXE_LINK_LIBS 
       ${libnifalcon_LIBRARY} 
       ${LIBNIFALCON_REQ_LIBS} 
      ) 

      ADD_SUBDIRECTORY(include) 
      ADD_SUBDIRECTORY(src) 
      IF(BUILD_EXAMPLES) 
       ADD_SUBDIRECTORY(examples) 
      ENDIF(BUILD_EXAMPLES) 
      IF(BUILD_SWIG_BINDINGS) 
       ADD_SUBDIRECTORY(lang/swig) 
      ENDIF(BUILD_SWIG_BINDINGS) 

      # pkg-config (use the CPack information) 
      # FIND_PACKAGE(PkgConfig) 
      # if(PKG_CONFIG_EXECUTABLE) 
      # set(PC_SHORT_NAME "${BUILDSYS_CPACK_NAME}") 
      # set(PC_LONG_NAME "${BUILDSYS_CPACK_NAME}") 
      # set(PC_LIBRARY_NAME "${LIBNIFALCON_CPP}") 
      # set(PC_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}") 
      # set(PC_VERSION "${LIBNIFALCON_MAJOR_VERSION}.${LIBNIFALCON_MINOR_VERSION}.${LIBNIFALCON_BUILD_VERSION}") 

      # if(LIBUSB_1_FOUND) 
      #  set(PC_REQUIRES "${PC_REQUIRES}libusb-1.0 ") 
      #  set(PC_LINK_FLAGS "${PC_LINK_FLAGS}-lnifalcon_comm_libusb ") 
      # endif(LIBUSB_1_FOUND) 

      # set(PC_LINK_FLAGS "${lib${PC_LIBRARY_NAME}_LINK_FLAGS} ${PC_LINK_FLAGS}") 
      # set(PC_LINK_FLAGS "-l${PC_LIBRARY_NAME} ${PC_LINK_FLAGS}") 
      # set(PC_COMPILE_FLAGS "${lib${PC_LIBRARY_NAME}_COMPILE_FLAGS}") 
      # set(PC_CONFIGURED_FILE 
      #  ${CMAKE_BINARY_DIR}/libnifalcon.pc 
      # ) 
      # MESSAGE("-- Generating ${PC_CONFIGURED_FILE}") 
      # configure_file(
      #  ${CMAKE_SOURCE_DIR}/libnifalcon.pc.cmake 
      #  ${PC_CONFIGURED_FILE} 
      #  @ONLY 
      # ) 
      # set(PKG_CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") 
      # install(FILES ${PC_CONFIGURED_FILE} DESTINATION ${PKG_CONFIG_DIR}) 
      # endif(PKG_CONFIG_EXECUTABLE) 
+2

Tại sao bạn cố chỉnh sửa tệp makefile khi nói ngay ở đầu tệp 'CMAKE được tạo: KHÔNG CHỈNH SỬA! '? Bạn nên chỉnh sửa tệp 'CMakeLists.txt' và bạn nên gắn thẻ câu hỏi của mình cho' cmake' thay vì 'make'. – MadScientist

Trả lời

2

Bạn có thể thêm thông tin sau vào Makefile.

CFLAGS += -fPIC 
CPPFLAGS += -fPIC 

Nhưng, thực sự, bạn nên sửa đổi mã cho cmake và sau đó tạo lại Makefile. Nên có một cách để thêm vào CFLAGS trong cmake.

EDIT: Có vẻ như bạn có thể đặt biến cmake CMAKE_C_FLAGS và CMAKE_CXX_FLAGS trong tệp đầu vào cmake.

+0

Tôi đã thử sửa đổi makefile thành vô ích, nhưng tôi nghĩ bạn đã đúng với việc thiết lập các cờ trong CMakeLists.txt Tôi đã thêm các dòng: (CMAKE_C_COMPILER "gcc") (CMAKE_CXX_COMPILER "g ++") bộ (CMAKE_CXX_FLAGS "$ {} CMAKE_CXX_FLAGS -fPIC") bộ (CMAKE_C_FLAGS "$ {} CMAKE_C_FLAGS -fPIC") để CMakeLists.txt nhưng tôi vẫn nhận được lỗi tương tự, bằng cách nào đó tôi cảm thấy cờ -fPIC đang được bị mất – user2744971

0

Tôi điều bạn đang liên kết với thư viện tăng sai (libboost_program_options-mt.a). Nó là tĩnh (.a) và có thể không được biên dịch bằng fPIC. Hãy thử sử dụng phiên bản được chia sẻ (.so).

+0

Tôi thấy rằng libboost_program_options-mt.a liên kết đến libboost_program_options.a, vì vậy tôi đã thử thay đổi liên kết thành libboost_program_options.so và tôi nhận được lỗi sau: /usr/bin/ld: cố gắng liên kết tĩnh của đối tượng động '/ usr/lib/gcc/x86_64 -linux-gnu/4.6 /../../../../ lib/libboost_program_options-mt.a ' collect2: ld trả về 1 trạng thái thoát làm cho [2]: *** [lib/libnifalcon_cli_base.so .1.0.1] Lỗi 1 làm cho [1]: *** [src/util/CMakeFiles/nifalcon_cli_base_SHARED.dir/all] Lỗi 2 thực hiện: *** [tất cả] Lỗi 2 – user2744971

+0

Trước hết trong CMakeLists của bạn. txt bạn đặt 'SET (Boost_USE_STATIC_LIBS ON)'. Tôi đoán đây là lý do CMake chọn phiên bản tĩnh của libboost_program_options. Thứ hai, bạn đã thay đổi ** hệ thống tập tin ** liên kết của libboost_program_options-mt.a để trỏ đến libboost_program_options.so? Tôi nghĩ đây là một ý tưởng tồi.Tôi nghĩ rằng hầu hết các vấn đề của bạn có liên quan đến cài đặt CMake. Bạn đang sử dụng hệ điều hành nào để biên dịch? – ToniBig

+0

Vấn đề là SET (Boost_USE_STATIC_LIBS ON), tôi đã thay đổi thành SET (Boost_USE_STATIC_LIBS OFF) và giờ nó đang hoạt động. Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn! – user2744971

1

Vấn đề là SET (Boost_USE_STATIC_LIBS ON) trong CMakeLists.txt, khi được đổi thành SET (Boost_USE_STATIC_LIBS OFF), makefile hoạt động tốt.

Cảm ơn mọi người vì đã giúp đỡ của họ