繁体   English   中英

/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 库,就像写在这里一样。 之后我得到了/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 名称说明

--library=namespec

将 namespec 指定的存档或 object 文件添加到要链接的文件列表中。 [...] ld 将在目录中搜索名为 libnamespec.so 的库

如果您非常仔细地阅读本文,您会得出这样的结论: -llibclickhouse-cpp-lib指示ld搜索名为liblibclickhouse-cpp-lib.so的库,但显然该库不存在。

这应该只是-lclickhouse-cpp-lib

就我而言,当我将 Cmake 版本更改为 2.9 时,问题已解决

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM