2016-04-01 26 views
0

Önceden geliştirilmiş kodu düzenlemeye çalışıyorum. Onu başarılı bir şekilde düzenleyebilir ve 'cmake' ve 'make' ile yapılandırabilirim. Çalıştığım problem "atan" fonksiyonunu kullanmaktır. Bu değişiklikle 'make' çalıştırma girişiminde, ben komut aşağıdaki hatayı alıyorum:Matematik işlevleri "make" ile çalışmayan C

[ 5%] Built target convenience_static 
[ 35%] Built target rtlsdr_shared 
[ 40%] Built target rtl_adsb 
[ 45%] Built target rtl_eeprom 
[ 50%] Built target rtl_fm 
[ 55%] Built target rtl_power 
Linking C executable rtl_sdr 
CMakeFiles/rtl_sdr.dir/rtl_sdr.c.o: In function `main': 
rtl_sdr.c:(.text.startup+0x2ce): undefined reference to `atanf' 
collect2: error: ld returned 1 exit status 
make[2]: *** [src/rtl_sdr] Error 1 
make[1]: *** [src/CMakeFiles/rtl_sdr.dir/all] Error 2 
make: *** [all] Error 2 

rtl_sdr.c ben düzenlediğimden dosyasıdır. Ben dahil ettik ve bu hala oluyor. Aklı başında olduğumdan emin olmak için, 'a' ile bir test c programı yaptım ve 'gcc' kullanarak derledim ve gayet iyi çalıştı. Bu yüzden benim CMake veya Make dosyamın gcc kullanmıyor olduğunu tahmin ediyorum, ama emin değilim. Temelde make veya cmake hakkında hiçbir şey bilmiyorum.

Herhangi bir yardım için teşekkür ederiz.

# Copyright 2012 OSMOCOM Project 
# 
# This file is part of rtl-sdr 
# 
# GNU Radio is free software; you can redistribute it and/or modify 
# it under the terms of the GNU General Public License as published by 
# the Free Software Foundation; either version 3, or (at your option) 
# any later version. 
# 
# GNU Radio is distributed in the hope that it will be useful, 
# but WITHOUT ANY WARRANTY; without even the implied warranty of 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
# GNU General Public License for more details. 
# 
# You should have received a copy of the GNU General Public License 
# along with GNU Radio; see the file COPYING. If not, write to 
# the Free Software Foundation, Inc., 51 Franklin Street, 
# Boston, MA 02110-1301, USA. 


######################################################################## 
# Project setup 
######################################################################## cmake_minimum_required(VERSION 2.6) project(rtlsdr C) 

#select the release build type by default to get optimization flags if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") message(STATUS "Build type not specified: defaulting to release.") endif(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "") 

list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules) 

if(NOT LIB_INSTALL_DIR) set(LIB_INSTALL_DIR lib) endif() 

# Set the version information here set(VERSION_INFO_MAJOR_VERSION 0) # increment major on api compatibility changes set(VERSION_INFO_MINOR_VERSION 5) # increment minor on feature-level changes set(VERSION_INFO_PATCH_VERSION git) # increment patch for bug fixes and docs include(Version) # setup version info 

######################################################################## 
# Compiler specific setup 
######################################################################## if(CMAKE_COMPILER_IS_GNUCC AND NOT WIN32) 
    ADD_DEFINITIONS(-Wall) 
    ADD_DEFINITIONS(-Wextra) 
    ADD_DEFINITIONS(-Wno-unused-parameter) 
    ADD_DEFINITIONS(-Wno-unused) 
    ADD_DEFINITIONS(-Wsign-compare) 
    ADD_DEFINITIONS(-Wdeclaration-after-statement) 
    #http://gcc.gnu.org/wiki/Visibility 
    add_definitions(-fvisibility=hidden) endif() 

######################################################################## 
# Find build dependencies 
######################################################################## find_package(PkgConfig) find_package(LibUSB) set(THREADS_USE_PTHREADS_WIN32 true) find_package(Threads) 

if(NOT LIBUSB_FOUND) 
    message(FATAL_ERROR "LibUSB 1.0 required to compile rtl-sdr") endif() if(NOT THREADS_FOUND) 
    message(FATAL_ERROR "pthreads(-win32) required to compile rtl-sdr") endif() 
######################################################################## 
# Setup the include and linker paths 
######################################################################## include_directories(
    ${CMAKE_SOURCE_DIR}/include 
    ${LIBUSB_INCLUDE_DIR} 
    ${THREADS_PTHREADS_INCLUDE_DIR}) 

#link_directories(
# ... 
#) 

# Set component parameters 
#set(INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE) 

######################################################################## 
# Create uninstall target 
######################################################################## configure_file(
    ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in 
    ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake @ONLY) 

add_custom_target(uninstall 
    ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) 

######################################################################## 
# Install udev rules 
######################################################################## option(INSTALL_UDEV_RULES "Install udev rules for RTL-SDR" OFF) if (INSTALL_UDEV_RULES) 
    install (
     FILES rtl-sdr.rules 
     DESTINATION "/etc/udev/rules.d" 
     COMPONENT "udev" 
     ) else (INSTALL_UDEV_RULES) 
    message (STATUS "Udev rules not being installed, install them with -DINSTALL_UDEV_RULES=ON") endif (INSTALL_UDEV_RULES) 

option(DETACH_KERNEL_DRIVER "Detach kernel driver if loaded" OFF) if (DETACH_KERNEL_DRIVER) 
    message (STATUS "Building with kernel driver detaching enabled") 
    add_definitions(-DDETACH_KERNEL_DRIVER=1) else (DETACH_KERNEL_DRIVER) 
    message (STATUS "Building with kernel driver detaching disabled, use -DDETACH_KERNEL_DRIVER=ON to enable") endif (DETACH_KERNEL_DRIVER) 

######################################################################## 
# Add subdirectories 
######################################################################## add_subdirectory(include) add_subdirectory(src) 

######################################################################## 
# Create Pkg Config File 
######################################################################## FOREACH(inc ${LIBUSB_INCLUDE_DIR}) 
    LIST(APPEND RTLSDR_PC_CFLAGS "-I${inc}") ENDFOREACH(inc) 

FOREACH(lib ${LIBUSB_LIBRARY_DIRS}) 
    LIST(APPEND RTLSDR_PC_LIBS "-L${lib}") ENDFOREACH(lib) 

# use space-separation format for the pc file STRING(REPLACE ";" " " RTLSDR_PC_CFLAGS "${RTLSDR_PC_CFLAGS}") STRING(REPLACE ";" " " RTLSDR_PC_LIBS "${RTLSDR_PC_LIBS}") 

# unset these vars to avoid hard-coded paths to cross environment IF(CMAKE_CROSSCOMPILING) 
    UNSET(RTLSDR_PC_CFLAGS) 
    UNSET(RTLSDR_PC_LIBS) ENDIF(CMAKE_CROSSCOMPILING) 

set(prefix ${CMAKE_INSTALL_PREFIX}) set(exec_prefix \${prefix}) set(libdir \${exec_prefix}/${LIB_INSTALL_DIR}) set(includedir \${prefix}/include) 

CONFIGURE_FILE(
    ${CMAKE_CURRENT_SOURCE_DIR}/librtlsdr.pc.in 
    ${CMAKE_CURRENT_BINARY_DIR}/librtlsdr.pc @ONLY) 

INSTALL(
    FILES ${CMAKE_CURRENT_BINARY_DIR}/librtlsdr.pc 
    DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) 

######################################################################## 
# Print Summary 
######################################################################## MESSAGE(STATUS "Building for version: ${VERSION}/${LIBVER}") MESSAGE(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}") 
+7

sen bağlamak mü sahip olabilir: Aşağıda

benim CMakeFile olduğunu '-lm'? – EOF

+0

"Bağlantı" ile ne demek istediğinden emin değilim. – John

cevap

2

deneyin Örneğin

sizin CMakeLists.txt içinde inşa hedefi için target_link_libraries için libm ekleyerek size

add_executable (test test.c) 
target_link_libraries (test m) 
+0

Bunlar CMakeLists.txt dosyasında yok. Sadece CMakeLists.txt dosyasına ekleyebilir miyim? – John

+0

Yaptığınız çıktıdan, 'rtl_sdr' yürütülebilir dosyasını bağladığını söylüyor. CMakeLists.txt dosyasından birinde (muhtemelen "src" dizininin) birinde şu satırlarla başlayan bir satır olacaktır: 'add_executable (rtl_sdr' Altında bir satır olabilir ya da olmayacak bir satır olabilir: "target_link_libraries (rtl_sdr" Eğer varsa, "rtl_sdr" den sonra kütüphane listesine 'm' ekleyin, değilse satırı ekleyin: 'target_link_libraries (rtl_sdr m)' –

+0

Bu işe yaradı! CMakeLists.txt Bu dosyadan iki tane olduğunun farkında değildim. – John