2016-12-19 7 views
0

clion 2016.3-1 및 번들로 제공된 cmake 3.6.2를 사용하여 여러 운영 체제에서 일부 모델 코드를 설정하려고합니다. Windows에서 cygwin 환경을 사용하고 있지만 해결할 수없는 연결 문제가 발생했습니다.cmake가 windows에서 cygwin으로 netcdf에 대한 정의되지 않은 참조를주는 이유는 무엇입니까?

undefined reference to `nc_open' 

바이너리 : I과 유사한 오류 메시지를 많이 얻을 그러나

cmake_minimum_required(VERSION 3.3) 
project(test_examples) 

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lnetcdf") 

include_directories("/usr/include") 
link_directories("/usr/lib") 

set(SOURCE_FILES main.c) 

add_executable(test_examples ${SOURCE_FILES}) 

: 여기

#include <stdlib.h> 
#include <stdio.h> 
#include <netcdf.h> 

#define ERRCODE 2 
#define ERR(e) {printf("Error: %s\n", nc_strerror(e)); exit(ERRCODE);} 

int main() { 
    int ncid, varid, dimid, retval; 
    size_t nlat; 
    char filepath[] = "minimumExample.nc"; 
    char dimname[64]; 
    double *latitudes; 

    // open nc file 
    if ((retval = nc_open(filepath, NC_NOWRITE, &ncid))) ERR(retval); 

    // find variable IDs 
    if ((retval = nc_inq_varid(ncid, "latitude", &varid))) ERR(retval); 

    // find dimension bounds 
    if ((retval = nc_inq_vardimid(ncid, varid, &dimid))) ERR(retval); 
    if ((retval = nc_inq_dim(ncid, dimid, dimname, &nlat))) ERR(retval); 

    // allocate data array 
    latitudes = malloc(sizeof(double) * nlat); 

    // get data 
    if ((retval = nc_get_var_double(ncid, varid, &latitudes[0]))) ERR(retval); 

    // close nc file 
    if ((retval = nc_close(ncid))) ERR(retval); 

    // free data array 
    free(latitudes); 

    return(0); 
} 

내 CMakeLists.txt입니다 : 여기에 내 코드의 최소한의 예입니다 Include 파일은 각각의 폴더에 cygwin 환경에 존재합니다. 내가 무엇이 누락 되었습니까?

+0

당신이 필요 haders 및 가져 오기 라이브러리를 설치 한 추가? nectcdf에는'libnetcdf-devel' 패키지가 필요합니다. – matzeri

+0

@matzeri 모든 헤더와 라이브러리가 설치되어 있습니다. 'netcdf.h'와'netcdf.dll.a' 파일은 각각 include와 lib 디렉토리에 있습니다. –

+0

그것은'libnetcdf.dll.a'의 –

답변

1

오류로 인해 링커에서 해당 기능에 대한 코드를 찾을 수 없다는 것입니다. 즉 라이브러리에 연결할 수 없습니다.

netcdf lib를 연결하려면 CMake target_link_libraries 함수를 사용해야합니다.

제거

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lnetcdf") 

target_link_libraries (test_examples netcdf) 
+0

이에 따라 CMakeLists 파일을 변경했습니다. 그렇게하기 위해'find_package (netcdf)'를 추가하려고했습니다. 그러나, 이것은 아나콘다 설치 라이브러리를 찾기 위해 인도합니다. 마지막으로 cygwin 환경에서 주어진 파일 이름을 사용하면 문제가 해결됩니다 :'find_package (libnetcdf.dll)' –