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

Shared library not linking / cannot be done this way?

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

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

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 class 包装在命名空间中,因此找不到库中的两个函数?

感谢 Joachim Pileborg 提供的答案!

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

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