Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linker 体系结构x86_64的Netcdf未定义符号_Linker_Netcdf - Fatal编程技术网

Linker 体系结构x86_64的Netcdf未定义符号

Linker 体系结构x86_64的Netcdf未定义符号,linker,netcdf,Linker,Netcdf,我在使用netcdf库时遇到了著名的 Undefined symbols for architecture x86_64: "NcVar::get(double*, long const*) const", referenced from: Reader<itk::Image<double, 3u> >::Read() in main.cpp.o ld: symbol(s) not found for architecture x86_64 clang: erro

我在使用netcdf库时遇到了著名的

Undefined symbols for architecture x86_64:
  "NcVar::get(double*, long const*) const", referenced from:
  Reader<itk::Image<double, 3u> >::Read() in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
该库位于应该位于的/usr/local/lib中。我假设这个路径在库include path中

$ls /usr/local/lib/|grep netcdf
libnetcdf.7.dylib
libnetcdf.a
libnetcdf.dylib
libnetcdf_c++.4.dylib
libnetcdf_c++.a
libnetcdf_c++.dylib
libnetcdf_c++4.1.dylib
libnetcdf_c++4.a
libnetcdf_c++4.dylib
我的代码以前是链接的,直到它没有

#include <iostream>
#include <exception>

#include <netcdfcpp.h>

std::string _filename="blabla.nc", _varname="variableName";
int _dim;
long* _sizeArray;
long _sizeFlat;
double* _data;

// Read netCDF
void Read()
{
        // Open the file.
        NcFile file( _filename.c_str(), NcFile::ReadOnly, NULL, 0, NcFile::Offset64Bits);

        NcVar* var = file.get_var( _varname.c_str() );
        if( var->is_valid() )
        {
            _sizeFlat = var->num_vals();
            _sizeArray = var->edges();

            /*
             _dim = var->num_dims();

             std::cout<< _dim<<std::endl;
             for (int i=0; i<_dim; i++)
                 std::cout<<_sizeArray[i]<<"\t";
             std::cout<<"\t"<<_sizeFlat<<std::endl;
             // */

            _data = new PixelType[_sizeFlat];

            try
            {
                var->get(_data, _sizeArray);
            }
            catch(std::exception& a)
            {
                a.what();

                //free mem
                delete[] _data;
                file.close();
                _sizeArray = NULL;
                var = NULL;

                //quit
                std::cout<<"Could not read variable :"<<_varname<<std::endl;
                exit(EXIT_FAILURE);
            }

            //free mem
            file.close();

        }
        else
        {
            //free mem
            file.close();
            var = NULL;

            //quit
            std::cout<<"Could not find variable :"<<_varname<<std::endl;
            exit(EXIT_FAILURE);
        }

}

 int main(void)
{
   Read();
   return 0;
}

我不知道如何解决这个链接器问题。你能帮帮我吗?

没人能帮你吗?我能提供更多信息吗?请告诉我。我觉得页眉和libs之间有区别。但是所有的东西都是自制的,所以对我来说没什么意义。
#include <iostream>
#include <exception>

#include <netcdfcpp.h>

std::string _filename="blabla.nc", _varname="variableName";
int _dim;
long* _sizeArray;
long _sizeFlat;
double* _data;

// Read netCDF
void Read()
{
        // Open the file.
        NcFile file( _filename.c_str(), NcFile::ReadOnly, NULL, 0, NcFile::Offset64Bits);

        NcVar* var = file.get_var( _varname.c_str() );
        if( var->is_valid() )
        {
            _sizeFlat = var->num_vals();
            _sizeArray = var->edges();

            /*
             _dim = var->num_dims();

             std::cout<< _dim<<std::endl;
             for (int i=0; i<_dim; i++)
                 std::cout<<_sizeArray[i]<<"\t";
             std::cout<<"\t"<<_sizeFlat<<std::endl;
             // */

            _data = new PixelType[_sizeFlat];

            try
            {
                var->get(_data, _sizeArray);
            }
            catch(std::exception& a)
            {
                a.what();

                //free mem
                delete[] _data;
                file.close();
                _sizeArray = NULL;
                var = NULL;

                //quit
                std::cout<<"Could not read variable :"<<_varname<<std::endl;
                exit(EXIT_FAILURE);
            }

            //free mem
            file.close();

        }
        else
        {
            //free mem
            file.close();
            var = NULL;

            //quit
            std::cout<<"Could not find variable :"<<_varname<<std::endl;
            exit(EXIT_FAILURE);
        }

}

 int main(void)
{
   Read();
   return 0;
}
cmake_minimum_required ( VERSION 2.6 )

#set project name
set( Version_Major 3 )
set( Version_Minor 0 )
set( ProjectName supercellDetection_v${Version_Major}.${Version_Minor} )
project ( ${ProjectName} )

if( COMMAND CMAKE_POLICY )
  cmake_policy( SET CMP0012 NEW )
  cmake_policy( SET CMP0009 NEW )
endif()

#set output path
set( EXECUTABLE_OUTPUT_PATH /absolute/path )

#generate source files list
file(
GLOB_RECURSE
source_files
src/*pp
)
#create output executable
add_executable( ${ProjectName} ${source_files} )

#look for itk
find_package( ITK REQUIRED )
include( ${ITK_USE_FILE} )
include_directories( ${ITK_INCLUDE_DIRS} )

#try for vtk
if ( ITKVtkGlue_LOADED )
find_package( VTK REQUIRED )
include( ${VTK_USE_FILE} )
endif()

#linker settings
#target_link_libraries( ${ProjectName} ITKCommon ITKIO ITKBasicFilters ITKReview )
target_link_libraries( ${ProjectName} ${ITK_LIBRARIES} )

# compilation options
add_definitions( "-Wall -std=c++11 -g" )

################################################################


#Generate list of header files
include_directories( "/opt/X11/include/" )
include_directories( "/usr/local/include/" )

#add libraries
file(
GLOB_RECURSE
x11Lib_files
/opt/X11/lib/*.dylib
)

target_link_libraries( ${ProjectName} ${x11Lib_files} )