gcc / mingw链接器失败,"首先在这里定义"当使用boost和quantlib时 - 这是我的错吗?

时间:2014-06-27 10:17:10

标签: c++ gcc boost

在我的Windows框中升级到gcc 4.8后,我的代码不再构建,因为链接器失败。有14个几乎相同的错误消息,第一个是:

  

[mingw的] \本地\ lib中/ libQuantLib.a(normaldistribution.o):normaldistribution.cpp :(数据$ _ZZN5boost4math6detail11erf_inv_impIeNS0_8policies6policyINS3_13promote_floatILb0EEENS3_14promote_doubleILb0EEENS3_14default_policyES9_S9_S9_S9_S9_S9_S9_S9_S9_S9_EEEET_RKSB_SD_RKT0_PKN4mpl_4int_ILi64EEEE1P [_ZZN5boost4math6detail11erf_inv_impIeNS0_8policies6policyINS3_13promote_floatILb0EEENS3_14promote_doubleILb0EEENS3_14default_policyES9_S9_S9_S9_S9_S9_S9_S9_S9_S9_EEEET_RKSB_SD_RKT0_PKN4mpl_4int_ILi64EEEE1P] +为0x0):长双升压::数学::细节的`多个定义: :erf_inv_imp,boost :: math :: policies :: promote_double,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_pol icy,boost :: math :: policies :: default_policy> >(long double const&,long double const&,boost :: math :: policies :: policy,boost :: math :: policies :: promote_double,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy ,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math :: policies :: default_policy,boost :: math: :policies :: default_policy> const&,mpl _ :: int_< 64> const *):: P'   的obj \调试\余量-distrib.o:余量-distrib.cpp :( RDATA $ _ZZN5boost4math6detail11erf_inv_impIeNS0_8policies6policyINS3_13promote_floatILb0EEENS3_14promote_doubleILb0EEENS3_14default_policyES9_S9_S9_S9_S9_S9_S9_S9_S9_S9_EEEET_RKSB_SD_RKT0_PKN4mpl_4int_ILi64EEEE1P [_ZZN5boost4math6detail11erf_inv_impIeNS0_8policies6policyINS3_13promote_floatILb0EEENS3_14promote_doubleILb0EEENS3_14default_policyES9_S9_S9_S9_S9_S9_S9_S9_S9_S9_EEEET_RKSB_SD_RKT0_PKN4mpl_4int_ILi64EEEE1P] +为0x0):此处首先定义

这一切都以

结束
  

collect2.exe:错误:ld返回1退出状态

我发现我可以使用-Wl,--allow-multiple-definition gcc选项“解决”这个问题,但我觉得这只能隐藏问题。我想了解发生了什么,特别是,这是否是我的错。

现在,margin-distrib.cpp使用来自boost :: math的三个发行版,与QuantLib的normaldistribution.cpp一样。因此,两者最终都会调用相同的boost函数。 由于这些boost库只是头文件,看起来这些函数最终都出现在QuanLib的dll和我的.o文件中,这是链接器不喜欢的。

有趣的是,这不会发生在Linux上,代码构建没有问题 - 但这可能是因为我在那里使用了boost和quantlib的旧版本。

那么,我做错了什么,或者是库中的问题?

0 个答案:

没有答案