/usr/bin/ld: 在链接 g++ 期间找不到
/usr/bin/ld: cannot find during linking g++
这个问题已经出现过很多次了。但是我没有找到答案。
我有这个 .cpp
文件
#include <clickhouse/client.h>
#include <iostream>
using namespace clickhouse;
int main(){
/// Initialize client connection.
Client client(ClientOptions().SetHost("localhost"));
client.Select("SELECT l.a, l.b from table", [] (const Block& block)
{
for (size_t i = 0; i < block.GetRowCount(); ++i) {
std::cout << block[0]->As<ColumnUInt64>()->At(i) << " "
<< block[1]->As<ColumnString>()->At(i) << "\n";
}
}
);
return 0;
}
并且我已经实例化了 SO 库,就像写的 here 一样。
之后我得到了 /usr/local/lib directory
的以下结构:
~/$ ls /usr/local/lib
>>libclickhouse-cpp-lib-static.a libclickhouse-cpp-lib.so
在下一步中,我尝试使用 g++
执行编译
~/$ g++ run.cpp -std=c++17 -o result -llibclickhouse-cpp-lib -L/usr/local/lib
>>/usr/bin/ld: cannot find -llibclickhouse-cpp-lib
>>collect2: error: ld returned 1 exit status
我不知道是什么阻碍了创建链接。
感谢您的帮助!
ld
的手册页对-l
选项的描述如下(无关细节省略):
-l namespec
--library=namespec
Add the archive or object file specified by namespec to the list of
files to link. [...] ld will search a directory for a library called
libnamespec.so
如果你仔细阅读这篇文章,你会得出这样的结论:-llibclickhouse-cpp-lib
指示 ld
搜索一个名为 liblibclickhouse-cpp-lib.so
的库,显然这个库不存在。
这应该只是 -lclickhouse-cpp-lib
.
试试这个:
g++ -std=c++11 -I./ -I./contrib -L./build/clickhouse/ -lclickhouse-cpp-lib-static -o demo demo.cpp ./build/clickhouse/libclickhouse-cpp-lib-static.a ./build/contrib/lz4/liblz4-lib.a ./build/contrib/cityhash/libcityhash-lib.a ./build/contrib/absl/libabsl-lib.a
这个问题已经出现过很多次了。但是我没有找到答案。
我有这个 .cpp
文件
#include <clickhouse/client.h>
#include <iostream>
using namespace clickhouse;
int main(){
/// Initialize client connection.
Client client(ClientOptions().SetHost("localhost"));
client.Select("SELECT l.a, l.b from table", [] (const Block& block)
{
for (size_t i = 0; i < block.GetRowCount(); ++i) {
std::cout << block[0]->As<ColumnUInt64>()->At(i) << " "
<< block[1]->As<ColumnString>()->At(i) << "\n";
}
}
);
return 0;
}
并且我已经实例化了 SO 库,就像写的 here 一样。
之后我得到了 /usr/local/lib directory
的以下结构:
~/$ ls /usr/local/lib
>>libclickhouse-cpp-lib-static.a libclickhouse-cpp-lib.so
在下一步中,我尝试使用 g++
~/$ g++ run.cpp -std=c++17 -o result -llibclickhouse-cpp-lib -L/usr/local/lib
>>/usr/bin/ld: cannot find -llibclickhouse-cpp-lib
>>collect2: error: ld returned 1 exit status
我不知道是什么阻碍了创建链接。
感谢您的帮助!
ld
的手册页对-l
选项的描述如下(无关细节省略):
-l namespec
--library=namespec
Add the archive or object file specified by namespec to the list of files to link. [...] ld will search a directory for a library called libnamespec.so
如果你仔细阅读这篇文章,你会得出这样的结论:-llibclickhouse-cpp-lib
指示 ld
搜索一个名为 liblibclickhouse-cpp-lib.so
的库,显然这个库不存在。
这应该只是 -lclickhouse-cpp-lib
.
试试这个:
g++ -std=c++11 -I./ -I./contrib -L./build/clickhouse/ -lclickhouse-cpp-lib-static -o demo demo.cpp ./build/clickhouse/libclickhouse-cpp-lib-static.a ./build/contrib/lz4/liblz4-lib.a ./build/contrib/cityhash/libcityhash-lib.a ./build/contrib/absl/libabsl-lib.a