共享库不链接/不能这样做?
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 的建议真的很有帮助。再次感谢!
这是我的问题:
在我的项目中,我有一个名为 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 的建议真的很有帮助。再次感谢!