共享库没有链接/不能这样做?

时间:2015-07-18 13:48:06

标签: c++ gcc shared-libraries

这是我的问题: 在我的项目中,我有一个名为Match的类。现在,我想用别人的代码来比较他们的结果。遗憾的是,他们还有一个名为Match的课程。

好的,所以我想我会这样做:

namespace MonteCarlo {
#include "monte-carlo/match.hpp"
}

我很欣赏这不是最佳做法,但我真的只是想现在测试输出而不是重写新命名空间中的所有内容。

然后,我从他的代码中创建了一个共享库,并将其链接起来:

LIBPATHS = -L mysql_connector/lib/ -Lmonte-carlo/lib                                                                                                                                                                                           
LIBS = -l mysqlcppconn -l boost_date_time -l boost_iostream  boost_system -l boost_filesystem -l MonteCarloTennis

但是当我建立时,我得到:

evaluator.cc:139: undefined reference to `MonteCarlo::Match::Match(double, double, double, double, bool, bool)'
evaluator.cc:140: undefined reference to `MonteCarlo::Match::play_match()'

但是在库中,使用nm,我看到了:

0000000000001286 T Match::Match(double, double, double, double, bool, bool)
0000000000001286 T Match::Match(double, double, double, double, bool, bool)

我对图书馆很陌生,所以我真的可以使用你的建议。我收到此链接器错误是因为我的库没有正确链接,或者因为我在命名空间中包装了Match类,因此找不到库中的两个函数?

1 个答案:

答案 0 :(得分:0)

感谢Joachim Pileborg提供答案!

#include包装在命名空间中意味着链接器无法在库中找到相应的函数。我现在已经通过将我的同事的代码放入命名空间来修复该问题。

这是一个非常简单的错误,但是有太多可能出错(我第一次建立一个库!),得到Joachim的建议真的很有帮助。再次感谢!