简体   繁体   English

与mingw一起使用Cspice

[英]Using Cspice with mingw

I am trying to use cspice with g++ for windows via mingw. 我试图通过mingw将cspice与g ++一起用于Windows。 Unfortunately cspice does not provide a library for mingw. 不幸的是,cspice没有为mingw提供库。 The libraries are available at https://naif.jpl.nasa.gov/naif/toolkit_C.html . 这些库位于https://naif.jpl.nasa.gov/naif/toolkit_C.html It gives undefined reference errors for the functions defined through cspice. 它为通过cspice定义的函数提供了未定义的参考错误。 It runs properly in Linux. 它可以在Linux中正常运行。 Can anyone suggest a method to make it work. 谁能提出一种使它起作用的方法。

I run: 我跑:

g++ -LK:\\Data\\cspice\\lib -IF:\\CPP\\Libraries\\Boost\\boost_1_68_0 -o foo foo.cpp -l:cspice.a -lm g ++ -LK:\\ Data \\ cspice \\ lib -IF:\\ CPP \\ Libraries \\ Boost \\ boost_1_68_0 -o foo foo.cpp -l:cspice.a -lm

The errors I get are: 我得到的错误是:

undefined reference to 'furnsh_c' and other functions I use from 'SpiceUsr.h'. 我对'SpiceUsr.h'使用的对'furnsh_c'和其他函数的未定义引用。

Am I not linking the file properly or what is the error. 我没有正确链接文件还是什么错误。

I managed to compile this in windows using MinGW. 我设法使用MinGW在Windows中编译了它。

I downloaded the code from NASA website for UNIX not WINDOWS. 我从NASA网站 (不是WINDOWS)上从UNIX下载了代码。

You need to download a libf2c library , the arith.h (comment this line //#include <config.h> ) header and the times.h header. 您需要下载一个libf2c库arith.h (注释此行//#include <config.h> )标头和times.h标头。

Then I use the following CMakeLists.txt with MinGW and CMAKE for windows. 然后,将下面的CMakeLists.txt与MinGW和CMAKE用于Windows。

mkdir build
cd build
cmake .. -G "MinGW Makefiles"
mingw32-make

Some compilation errors will came out but they are very straightforward to solve. 会出现一些编译错误,但是很容易解决。

# CMAKE version and project name
cmake_minimum_required( VERSION 2.8.11 )
project( cspice )

# Add preprocessor directives
SET( GCC_COVERAGE_COMPILE_FLAGS "-c -ansi -m64 -O2 -fPIC -DNON_UNIX_STDIO" )
#SET( GCC_COVERAGE_LINK_FLAGS   "-lf2c -lm" )
#SET( GCC_COVERAGE_LINK_FLAGS   "-lf2c" )

SET(CMAKE_CXX_FLAGS        "${CMAKE_CXX_FLAGS}        ${GCC_COVERAGE_COMPILE_FLAGS}" )
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )

# Include directories
include_directories( include
                     libf2c )

file( GLOB f2c_src      "libf2c/*.c" )
file( GLOB f2c_headers  "libf2c/*.h" )

file( GLOB csupport_src     "src/csupport/*.c" )
file( GLOB csupport_headers "src/csupport/*.h" )

file( GLOB brief_src     "src/brief_c/*.c" )
file( GLOB chronos_src   "src/chrnos_c/*.c" )
file( GLOB ckbrief_src   "src/ckbref_c/*.c" )
file( GLOB commnt_src    "src/commnt_c/*.c" )
file( GLOB dskbrief_src  "src/dskbrief_c/*.c" )
file( GLOB dskexp_src    "src/dskexp_c/*.c" )
file( GLOB frmdiff_src   "src/frmdif_c/*.c" )
file( GLOB inspekt_src   "src/inspkt_c/*.c" )
file( GLOB mkdsk_src     "src/mkdsk_c/*.c" )
file( GLOB mkspk_src     "src/mkspk_c/*.c" )
file( GLOB msopck_src    "src/msopck_c/*.c" )
file( GLOB spacit_src    "src/spacit_c/*.c" )
file( GLOB spkdiff_src   "src/spkdif_c/*.c" )
file( GLOB spkmerge_src  "src/spkmrg_c/*.c" )
file( GLOB tobin_src     "src/tobin_c/*.c" )
file( GLOB toxfr_src     "src/toxfr_c/*.c" )
file( GLOB version_src   "src/versn_c/*.c" )

file( GLOB cspice_src     "src/cspice/*.c" )
file( GLOB cspice_headers "include/*.h" )

# Libraries
add_library( f2c ${f2c_src} ${f2c_header} )

add_library( csupport ${csupport_src} ${csupport_header} )

add_library( brief    ${brief_src} )
add_library( chronos  ${chronos_src} )
add_library( ckbrief  ${ckbrief_src} )
add_library( commnt   ${commnt_src} )
add_library( dskbrief ${dskbrief_src} )
add_library( dskexp   ${dskexp_src} )
add_library( frmdiff  ${frmdiff_src} )
add_library( inspekt  ${inspekt_src} )
add_library( mkdsk    ${mkdsk_src} )
add_library( mkspk    ${mkspk_src} )
add_library( msopck   ${msopck_src} )
add_library( spacit   ${spacit_src} )
add_library( spkdiff  ${spkdiff_src} )
add_library( spkmerge ${spkmerge_src} )
add_library( tobin    ${tobin_src} )
add_library( toxfr    ${toxfr_src} )
add_library( version  ${version_src} )

add_library( cspice ${cspice_src} ${cspice_headers} )

# Executable
add_executable( simple src/cook_c/simple.c )
add_executable( states src/cook_c/states.c )
add_executable( subpt  src/cook_c/subpt.c )
add_executable( tictoc src/cook_c/tictoc.c )

# Link the executable and libraries
target_link_libraries ( f2c )

target_link_libraries ( csupport f2c )

target_link_libraries ( brief    f2c )
target_link_libraries ( chronos  f2c )
target_link_libraries ( ckbrief  f2c )
target_link_libraries ( commnt   f2c )
target_link_libraries ( dskbrief f2c )
target_link_libraries ( dskexp   f2c )
target_link_libraries ( frmdiff  f2c )
target_link_libraries ( inspekt  f2c )
target_link_libraries ( mkdsk    f2c )
target_link_libraries ( mkspk    f2c )
target_link_libraries ( msopck   f2c )
target_link_libraries ( spacit   f2c )
target_link_libraries ( spkdiff  f2c )
target_link_libraries ( spkmerge f2c )
target_link_libraries ( tobin    f2c )
target_link_libraries ( toxfr    f2c )
target_link_libraries ( version  f2c )

target_link_libraries ( cspice brief chronos ckbrief commnt dskbrief dskexp frmdiff inspekt mkdsk mkspk msopck spacit spkdiff spkmerge tobin toxfr version )

target_link_libraries ( simple cspice )
target_link_libraries ( states cspice )
target_link_libraries ( subpt  cspice )
target_link_libraries ( tictoc cspice )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM