1

我正在尝试使用谷歌的 cityhash 散列函数。我无法将它链接到我的 c++ 代码。我已经安装了 cityHash,它在我的 /usr/local/lib 中生成了 libcityhash.la 等文件。

我正在设置 LD_LIB_LIBRARY=/usr/local/lib,但它似乎没有链接到这些文件。

代码:

#include <iostream>
#include <fstream>
#include <cstdlib>
int main()
{
    std::ifstream file("dev/urandom");
    char buff[4096];
    file.read(buff, 4096);
    const uint128 hashed = CityHash128(buff,4096);
    file.close();

}

编译:
g++ -o city cityHash.cpp

错误:
/tmp/cctSoHTX.o:在函数 main:cityHash.cpp:(.text+0x73):未定义引用 `CityHash128(char const*, unsigned long)' collect2:错误:ld 返回 1 退出状态

我包括“city.h”并尝试按如下方式编译它:

g++ -I /usr/local/include/ -L/usr/local/lib -llibcityhash.a cityHash.cpp -o city

但我仍然得到 :undefined reference to `CityHash128(char const*, unsigned long)' –

4

1 回答 1

5

好的,这是古老的“订单有所作为”。代替:

g++ -I /usr/local/include/ -L/usr/local/lib /usr/local/lib/libcityhash.a cityHash.cpp -o city

你应该做:

g++ -I /usr/local/include/ -L/usr/local/lib  cityHash.cpp -o city -lcityhash

(库和目标文件按照在命令行中出现的顺序进行处理,并且由于到目前为止没有任何代码在您列出它时使用库中的任何内容,因此该库中没有包含任何内容 - 然后当您到达实际确实使用它的代码,您没有在它之后给链接器库,所以它找不到符号 - 请注意,这取决于链接器的行为,因此相同的规则可能不适用于例如MS Visual Studio 编译器/链接器设置)

于 2014-09-14T21:31:50.073 回答