gsl出现LNK2001 LNK1120问题排查

加上windows.h这个头文件,没有这个问题

前提:编译gsl库成功,用其他功能正常,但是使用 gsl_rng.h头文件,出现问题;

使用语句gsl_rng_alloc(gsl_rng_env_setup()),这样没问题,gsl_rng_env_setup()设置的是默认gsl_rng_mt1993,

但是直接使用gsl_rng_alloc(gsl_rng_mt1993),仍然出现LNK错误,同上的LNK错误。查看gsl库的官方文档,gsl_rng_default,出现问题,gsl_rng_default对应的是gsl_rng_mt1993,这样看来是引入   random generator出现问题。

查找相关信息,说在VS工程中,属性->C/C++->预处理器->预处理定义中   加上GSL_DLL

查找GSL_DLL这个宏,是什么作用;发现其定义在 gsl_types.h文件之中,GSL_DLL宏如下所示

#ifdef WIN32
#  ifdef GSL_DLL
#    ifdef DLL_EXPORT
#      define GSL_VAR extern __declspec(dllexport)
#    else
#      define GSL_VAR extern __declspec(dllimport)

#    endif


由此猜测是宏定义出了问题,查看extern __declspec(dllexport)和extern __declspec(dllimport),发现与def文件相关,意思是从dll中引入数据或导出数据,查看libgsl.def文件,得到以下结果

gsl_rng_borosh13 DATA
gsl_rng_cmrg DATA
gsl_rng_coveyou DATA
gsl_rng_default DATA
gsl_rng_default_seed DATA
gsl_rng_fishman18 DATA
gsl_rng_fishman20 DATA
gsl_rng_fishman2x DATA
gsl_rng_generator_types DATA
gsl_rng_gfsr4 DATA
gsl_rng_knuthran DATA
gsl_rng_knuthran2 DATA
gsl_rng_knuthran2002 DATA
gsl_rng_lecuyer21 DATA
gsl_rng_minstd DATA
gsl_rng_mrg DATA
gsl_rng_mt19937 DATA
gsl_rng_mt19937_1998 DATA
gsl_rng_mt19937_1999 DATA
gsl_rng_r250 DATA
gsl_rng_ran0 DATA
gsl_rng_ran1 DATA
gsl_rng_ran2 DATA
gsl_rng_ran3 DATA
gsl_rng_rand DATA
gsl_rng_rand48 DATA
gsl_rng_random128_bsd DATA
gsl_rng_random128_glibc2 DATA
gsl_rng_random128_libc5 DATA

gsl_rng_random256_bsd DATA

看到在def文件中,random generator是以DATA形式定义,既然定义了GSL_DLL,但是从dll导入数据失败,猜测是GSL_DLL没有发挥作用,使GSL_VAR替换为  extern __declspec(dllimport),尝试将random generator中的GSL_VAR,直接改为extern _declspec(dllimport),在gsl_rng.h之中。

再次编译,没有这个问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值