这个问题已经问过很多次了,但我还是没有找到答案。
我有这个.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库,就像这里写的那样。之后我得到了/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
我不知道是什么阻碍了创建链接。
谢谢你的帮助!
3条答案
按热度按时间tyky79it1#
ld
的手册页对-l
选项的描述如下(不相关的细节省略):-l名称规格
--库=名称规范
将namespec指定的归档文件或对象文件添加到要链接的文件列表中。[...] ld将在目录中搜索名为www.example.com的库libnamespec.so
如果您非常仔细地阅读这篇文章,您会得出这样的结论:
-llibclickhouse-cpp-lib
指示ld
搜索名为liblibclickhouse-cpp-lib.so
的库,显然,该库并不存在。这应该只是
-lclickhouse-cpp-lib
。fd3cxomn2#
在我的例子中,当我将Cmake版本更改为2.9时,问题就解决了
zvms9eto3#
试试这个: