2012-04-20 120 views
2

我一直试图用fftw来链接我的项目,到目前为止,我已经得到它来编译,并完成链接的“传递1”,但没有完成。正如FFTW网站所说,我生成了所有.lib文件,并将它们复制到C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ lib \ amd64(因为我正在编译x64,并且此目录包含在我的库目录),项目中的.h文件以及项目可执行文件目录中的.dll文件。Visual Studio 2010中的FFTWI

我复制atutorial程序,我得到确切的错误是:

1>fftw_test.obj : error LNK2019: unresolved external symbol __imp__fftw_free referenced in function "int __cdecl fftw(void)" ([email protected]@YAHXZ) 
1>fftw_test.obj : error LNK2019: unresolved external symbol __imp__fftw_destroy_plan referenced in function "int __cdecl fftw(void)" ([email protected]@YAHXZ) 
1>fftw_test.obj : error LNK2019: unresolved external symbol __imp__fftw_execute referenced in function "int __cdecl fftw(void)" ([email protected]@YAHXZ) 
1>fftw_test.obj : error LNK2019: unresolved external symbol __imp__fftw_plan_dft_1d referenced in function "int__cdecl fftw(void)" ([email protected]@YAHXZ) 
1>fftw_test.obj : error LNK2019: unresolved external symbol __imp__fftw_malloc referenced in function "int__cdecl fftw(void)" ([email protected]@YAHXZ) 

我已经试过:

Project -> Properties -> Linker -> Input -> Additional dependencies 

包含libfftw3-3.lib

和 dumpbin/exports libfftw3-3.lib generated _fftw_free _fftw_destroy_plan 和其他无法解决的功能。

是因为它在寻找__imp_fftw_functionname,它只能找到_fftw_functionname函数?

不管怎样,也许这将有助于太:在通1,几次它说 搜索C:\ VC \ LIB \ AMD64 \ libfftw3-3.lib: 但它从来不说 “发现”,“引用“或”加载“,就像它为其他库一样。

+4

你实际复制第三方库到Visual Studio安装目录?更好的方法是在* Linker - > General - > Additional Library Directories *中输入库路径,然后按照您已经完成的方式在* Additional Dependencies *中输入库名称。 – Praetorian 2012-04-20 19:29:54

+0

___imp_前缀用于声明__declspec(dllimport)的符号。 – SChepurin 2012-04-20 21:43:44

回答

0

如果你熟悉的CMake,你可以使用这种方法:

我创建了FFTW-3.3.2这个文件的CMake我与Visual Studio的测试 2010 64:

cmake_minimum_required (VERSION 2.8) 
PROJECT (fftw-3.3.2) 

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ../../Debug) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ../../Release) 

# Standard:   /DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR 
IF (WIN32) 
     SET(CMAKE_CXX_FLAGS "/DWIN32 /D_WINDOWS /W4 /Zi /EHsc /GR- /MP /openmp /bigobj") 
     ADD_DEFINITIONS(-D_OPENMP -DFFTW_DLL -DLIBFFTWF33_EXPORTS) # Visual Studio 2005 and up supports OpenMP 
ENDIF (WIN32) 


file(GLOB   fftw_api_SOURCE     api/*.c    api/*.h) 
file(GLOB   fftw_dft_SOURCE     dft/*.c    dft/*.h) 
file(GLOB   fftw_dft_scalar_SOURCE   dft/scalar/*.c  dft/scalar/*.h) 
file(GLOB   fftw_dft_scalar_codelets_SOURCE dft/scalar/codelets/*.c  dft/scalar/codelets/*.h) 
file(GLOB   fftw_dft_simd_SOURCE   dft/simd/*.c  dft/simd/*.h) 

file(GLOB   fftw_dft_simd_sse2_SOURCE  dft/simd/sse2/*.c dft/simd/sse2/*.h) 
file(GLOB   fftw_kernel_SOURCE    kernel/*.c   kernel/*.h) 
file(GLOB   fftw_rdft_SOURCE    rdft/*.c   rdft/*.h) 
file(GLOB   fftw_rdft_scalar_SOURCE   rdft/scalar/*.c  rdft/scalar/*.h) 

file(GLOB   fftw_rdft_scalar_r2cb_SOURCE rdft/scalar/r2cb/*.c 
                rdft/scalar/r2cb/*.h) 
file(GLOB   fftw_rdft_scalar_r2cf_SOURCE rdft/scalar/r2cf/*.c 
                rdft/scalar/r2cf/*.h) 
file(GLOB   fftw_rdft_scalar_r2r_SOURCE  rdft/scalar/r2r/*.c 
                rdft/scalar/r2r/*.h) 

file(GLOB   fftw_rdft_simd_SOURCE   rdft/simd/*.c  rdft/simd/*.h) 
file(GLOB   fftw_rdft_simd_sse2_SOURCE  rdft/simd/sse2/*.c rdft/simd/sse2/*.h) 

file(GLOB   fftw_reodft_SOURCE    reodft/*.c   reodft/*.h) 
file(GLOB   fftw_simd_support_SOURCE  simd-support/*.c simd-support/*.h) 
#file(GLOB   fftw_threads_SOURCE    threads/*.c   threads/*.h) 


set(${fftw_threads_SOURCE} 
    threads/api.c 
    threads/conf.c 
    threads/ct.c 
    threads/dft-vrank-qeq1.c 
    threads/f77api.c 
    threads/hc2hc.c 
    threads/openmp.c 
    threads/rdft-vrank-geq1.c 
    threads/vrank-geq1-rdft2.c) 

source_group(fftw\\api      FILES ${fftw_api_SOURCE}) 
source_group(fftw\\dft      FILES ${fftw_dft_SOURCE}) 

source_group(fftw\\dft\\scalar    FILES ${fftw_dft_scalar_SOURCE}) 
source_group(fftw\\dft\\scalar\\codelets FILES ${fftw_dft_scalar_codelets_SOURCE}) 
source_group(fftw\\dft\\simd    FILES ${fftw_dft_simd_SOURCE}) 
source_group(fftw\\dft\\simd\\sse2   FILES ${fftw_dft_simd_sse2_SOURCE}) 


source_group(fftw\\kernel     FILES ${fftw_kernel_SOURCE}) 
source_group(fftw\\rdft      FILES ${fftw_rdft_SOURCE}) 
source_group(fftw\\rdft\\scalar    FILES ${fftw_rdft_scalar_SOURCE}) 

source_group(fftw\\rdft\\scalar\\r2cb  FILES ${fftw_rdft_scalar_r2cb_SOURCE}) 
source_group(fftw\\rdft\\scalar\\r2cf  FILES ${fftw_rdft_scalar_r2cf_SOURCE}) 
source_group(fftw\\rdft\\scalar\\r2r  FILES ${fftw_rdft_scalar_r2r_SOURCE}) 

source_group(fftw\\rdft\\simd    FILES ${fftw_rdft_simd_SOURCE}) 
source_group(fftw\\rdft\\simd\\sse2   FILES ${fftw_rdft_simd_sse2_SOURCE}) 

source_group(fftw\\reodft     FILES ${fftw_reodft_SOURCE}) 
source_group(fftw\\simd_support    FILES ${fftw_simd_support_SOURCE}) 
source_group(fftw\\threads     FILES ${fftw_threads_SOURCE}) 

include_directories(
    kernel 
    api 
    dft 
    dft/scalar 
    dft/scalar/codelets # rellay needed? 
    dft/simd 
    dft/simd/sse2 
    rdft 
    rdft/scalar 
    rdft/simd 
    reodft 
    ${CMAKE_CURRENT_SOURCE_DIR} # thats where the config.h is located 
    simd-support 
) 

# Create a target for the library 
ADD_LIBRARY(fftw-3.3.2 SHARED 
    ${fftw_api_SOURCE} 
    ${fftw_dft_SOURCE} 
    ${fftw_dft_scalar_SOURCE} 
    ${fftw_dft_scalar_codelets_SOURCE} 
    ${fftw_dft_simd_SOURCE} 
    ${fftw_dft_simd_sse2_SOURCE} 
    ${fftw_kernel_SOURCE} 
    ${fftw_rdft_SOURCE} 
    ${fftw_rdft_scalar_SOURCE} 

    ${fftw_rdft_scalar_r2cb_SOURCE} 
    ${fftw_rdft_scalar_r2cf_SOURCE} 
    ${fftw_rdft_scalar_r2r_SOURCE} 

    ${fftw_rdft_simd_SOURCE} 
    ${fftw_rdft_simd_sse2_SOURCE} 
    ${fftw_reodft_SOURCE} 
    ${fftw_simd_support_SOURCE} 
    ${fftw_threads_SOURCE} 
) 

也需要this config.h文件。

这将解决Windows中的所有建筑的问题 - 将立即 添加支持(与小的变化也许)

  • 的Visual Studio 6
  • 的Visual Studio 7
  • 的Visual Studio 7。网2003
  • 的Visual Studio 8 2005
  • 的Visual Studio 8 2005
  • 的Visual Studio 8 2005 Win64的
  • 的Visual Studio 9 2008
  • 的Visual Studio 9 2008 IA64
  • 的Visual Studio 9 2008 Win64的
  • Visual Studio 10
  • Visual Studio 10 Win64
  • Visual Studio 10 IA64
  • 的Visual Studio 11
  • 的Visual Studio 11 Win64的
  • 的Visual Studio 11 ARM