2016-12-19 6 views
0

私は、clion 2016.3-1とバンドルされているcmake 3.6.2を使用して複数のオペレーティングシステムでいくつかのモデルコードを設定しようとしています。 Windowsではcygwin環境を使用していますが、解決できないリンクの問題が発生しました。なぜcmakeはwindows上でcygwinを使ってnetcdfの定義されていない参照を与えるのですか?

undefined reference to `nc_open' 

バイナリ:私はのようなエラーメッセージの多くを得るしかし

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である:ここに私のコードの最小例はありますインクルードファイルはすべてcygwin環境のそれぞれのフォルダにあります。 私は何が欠けていますか?

+0

を追加するにはあなたが必要なhadersとインポートライブラリをインストールしたことがありますか? nectcdfには 'libnetcdf-devel'パッケージが必要です。 – matzeri

+0

@matzeriすべてのヘッダーとライブラリがインストールされています。ファイル 'netcdf.h'と' netcdf.dll.a'はそれぞれincludeとlibディレクトリにあります。 –

+0

それはofc '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)'を追加しようとしました。しかし、これは私のAnacondaインストールのライブラリを見つけることにつながる。最後に、cygwin環境で与えられたファイル名を使用して、この問題を解決しました: 'find_package(libnetcdf.dll)' –

関連する問題