Нерешенная ошибка связи символа Visual Studio 2017 с библиотекой интерфейса NetCDF C ++ 4.3.0, скомпилированной с Mingw64 - PullRequest
0 голосов
/ 19 апреля 2019

Проблема

Используя MSYS / Mingw64 / g ++, я скомпилировал интерфейсную библиотеку NetCDF4 C ++.Я хочу использовать его в проекте Win_x64 Visual Studio 2017 (компилятор / компоновщик v141), но получаю ошибки компоновщика и не уверен, где.

Шаги и результаты

Загрузил следующее:

  1. Встроенная в Windows библиотека NetCDF C: netcdf_c_libs

  2. C ++ Библиотека интерфейса: netcdf-cxx4-4.3.0

Используя приведенный ниже сценарий bash, библиотека компилируется с помощью приведенного ниже сценария bash с make check, возвращая PASS 7/8 & 1 FAIL в тестах (не связанная с этим проблема).

Цель

Для успешной сборки и запуска pres_temp_4D_wr.cpp в Visual Studio 2017.

Соответствующие вопросы и ответы

Чтотакое неопределенная ссылка / неразрешенная внешняя ошибка символа и как ее исправить?

Это слишком общая проблема.Эта проблема изолирована.

Код

#!/usr/bin/bash

# Return if command/pipeline returns error
set -e

export CC="gcc"
export CXX="g++"

### Linking netCDF C Library - netCDF4.6.3-NC4-DAP-64.exe
# Got test fails with CXXFLAGS: -mdll -O2

export CFLAGS="-I/c/lib/netCDF-4.6.3/include"
export CPPFLAGS="-I/c/lib/netCDF-4.6.3/include"
export CXXFLAGS="-I/c/lib/netCDF-4.6.3/include"
export LDFLAGS="-L/c/lib/netCDF-4.6.3/lib"

export NETCDF_DIR="/c/dev/netcdf-cxx4"
export BUILD_DIR="$NETCDF_DIR/build"
export RELEASE_DIR="/c/lib/netcdf-cxx-4.3.0"

echo $CC
echo $CXX
echo $CPPFLAGS
echo $CXXFLAGS
echo $LDFLAGS
echo $NETCDF_DIR
echo $BUILD_DIR

# Enter netcdf directory
cd $NETCDF_DIR

# Restting NC++ interface library. Using v4.3.0. https://github.com/Unidata/netcdf-cxx4
git reset --hard
git clean -fdx

## Not sure what this does... 
# just following git readme instructions to do this prior to configure
autoreconf -if

mkdir -p $BUILD_DIR
cd $BUILD_DIR

#### Configure & Compile ####

# Someone said put this in?
# --host=x86_64-w64-mingw32
# --enable-shared

../configure --prefix=$RELEASE_DIR 2>&1 | tee configure-output.log
mingw32-make -j4 2>&1 | tee make-output.log && mingw32-make install 2>&1 | tee make-install-output.log
mingw32-make check 2>&1 | tee make-check-output.log

Visual Studio 2017 (v141) Параметры компоновщика:

/OUT:"C:\Users\Robbie\Projects\netcdf-data-analysis\cpp-tdms-streamer\build\TDMS_Streamer\Debug-x64\TDMS_Streamer.exe" /MANIFEST /NXCOMPAT /PDB:"C:\Users\Robbie\Projects\netcdf-data-analysis\cpp-tdms-streamer\build\TDMS_Streamer\Debug-x64\TDMS_Streamer.pdb" /DYNAMICBASE "szip.lib" "zlib.lib" "hdf5.lib" "hdf5_hl.lib" "hdf5_hl_cpp.lib" "netcdf.lib" "libnetcdf_c++4.a" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X64 /INCREMENTAL /PGD:"C:\Users\Robbie\Projects\netcdf-data-analysis\cpp-tdms-streamer\build\TDMS_Streamer\Debug-x64\TDMS_Streamer.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"C:\Users\Robbie\Projects\netcdf-data-analysis\cpp-tdms-streamer\build\TDMS_Streamer\intermediates\Debug-x64\TDMS_Streamer.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /VERBOSE:Lib /LIBPATH:"C:\Users\Robbie\Projects\netcdf-data-analysis\cpp-tdms-streamer\lib\HDF5-1.10.5-win64\lib" /LIBPATH:"C:\Users\Robbie\Projects\netcdf-data-analysis\cpp-tdms-streamer\lib\netCDF-4.6.3\lib" /LIBPATH:"C:\lib\netcdf-cxx-4.3.0\lib" /LIBPATH:"C:\Users\Robbie\Projects\netcdf-data-analysis\cpp-tdms-streamer\lib\tdms-recording-lib" /LIBPATH:"C:\lib\boost\boost_1_68_0\stage\lib" /TLBID:1 

Ошибка компоновщика (1 из 13)

1>pres_temp_4D_wr.obj : error LNK2019: unresolved external symbol 
"public: __cdecl netCDF::NcFile::NcFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,enum netCDF::NcFile::FileMode)" (??0NcFile@netCDF@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@W4FileMode@01@@Z) 
referenced in function main
...