【问题标题】:g++ cannot find library although it's thereg++ 找不到库,虽然它在那里
【发布时间】:2022-01-08 04:41:09
【问题描述】:

我正在编译一些 cpp 文件:

$ ​g++ -c --std=c++17 -I/antlr4/runtime/Cpp/runtime/src/ *.cpp

一切顺利:

$ ls -l *.cpp *.o
-rw-r--r-- 1 root root   76637 Dec  1 14:33 Java8Lexer.cpp
-rw-r--r-- 1 root root  370768 Dec  1 15:13 Java8Lexer.o
-rw-r--r-- 1 root root  925012 Dec  1 14:33 Java8Parser.cpp
-rw-r--r-- 1 root root 5037896 Dec  1 15:13 Java8Parser.o
-rw-r--r-- 1 root root     113 Dec  1 14:33 Java8ParserBaseListener.cpp
-rw-r--r-- 1 root root    2312 Dec  1 15:13 Java8ParserBaseListener.o
-rw-r--r-- 1 root root     109 Dec  1 14:33 Java8ParserListener.cpp
-rw-r--r-- 1 root root    2304 Dec  1 15:13 Java8ParserListener.o
-rw-r--r-- 1 root root     724 Dec  1 14:36 main.cpp
-rw-r--r-- 1 root root  324360 Dec  1 15:13 main.o

当我尝试链接库时,它失败了:

$ g++ *.o -l/antlr4/runtime/Cpp/dist/libantlr4-runtime.so.4.9.3
/usr/bin/ld: cannot find -l/antlr4/runtime/Cpp/dist/libantlr4-runtime.so.4.9.3
collect2: error: ld returned 1 exit status

这很奇怪,因为共享库确实存在:

$ ls -l /antlr4/runtime/Cpp/dist/libantlr4-runtime.so.4.9.3
-rwxr-xr-x 1 root root 1599624 Dec  1 14:28 /antlr4/runtime/Cpp/dist/libantlr4-runtime.so.4.9.3

【问题讨论】:

  • 试试:g++ *.o -L /antlr4/runtime/Cpp/dist -lantlr4-runtime
  • @EricMarchand 它有效!所以删除lib 前缀和文件后缀。也许您可以发布作为未来用户的简短答案

标签: c++ g++ antlr4 ld


【解决方案1】:

您可以使用选项 -L 指定目录,并使用其缩写形式(无 lib 前缀,无 .so.xxx 后缀)指定库文件:

 g++ *.o -L /antlr4/runtime/Cpp/dist -lantlr4-runtime

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多