【问题标题】:g++ will not link to library in /usr/lib/g++ 不会链接到 /usr/lib/ 中的库
【发布时间】:2017-04-10 23:34:17
【问题描述】:

我创建了一个库并将其安装在 /usr/lib 中(使用 cmake),例如:

set(CMAKE_INSTALL_PREFIX /usr/) 
target_link_libraries(ssd1306)
set_target_properties(ssd1306 PROPERTIES   VERSION 1.0.0   SOVERSION 1 )
install(TARGETS ssd1306 DESTINATION lib)   
install(FILES ${SSD1306_HEADERS} DESTINATION include)

这很好,并且该库存在于我的文件系统中: 图书馆:

ls -l /usr/lib/libssd1306*

/usr/lib/libssd1306.so -> libssd1306.so.1
/usr/lib/libssd1306.so.1 -> libssd1306.so.1.0.0
/usr/lib/libssd1306.so.1.0.0

还有标题:

ls -l /usr/include/ssd1306.h

/usr/include/ssd1306.h

然后我编写了一个使用该库的程序(再次使用 cmake):

target_link_libraries(ssd1306-info libssd1306)

但由于某种原因,它不会在编译时链接到我的库:

/usr/bin/ld: 找不到 -llibssd1306

找到头文件并创建目标文件,但链接失败。

当然 /usr/lib/ 在 g++ 搜索路径中:

g++ -print-search-dirs

安装:/usr/lib/gcc/x86_64-linux-gnu/5/ 程序:=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/ usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../ ../../x86_64-linux-gnu/bin/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../ x86_64-linux-gnu/bin/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../x86_64-linux-gnu/bin/ 库:=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../x86_64-linux- gnu/lib/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../x86_64-linux-gnu/lib/x86_64- linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../x86_64-linux-gnu/lib/../lib/:/usr/lib /gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../ ../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/5 /:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/5/:/usr/lib/x86_64-linux-gnu/:/usr/ lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../x86_64-linux-gnu/lib/:/usr/lib/gcc /x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/

我做错了什么?

【问题讨论】:

  • 尝试在详细模式下运行make 以查看它如何尝试构建您的程序。您可以通过在运行 make 时添加 VERBOSE=1 参数来实现。
  • 我认为您需要通过运行 ldconfig 来更新库缓存。
  • 不应该只有target_link_libraries(ssd1306-info ssd1306)吗?
  • 您是否遇到了 32 位与 64 位库的问题?
  • 您是否仔细检查了所有这些符号链接?

标签: c++ cmake


【解决方案1】:

想通了。

链接在同一个对象 (.o) 文件中的库和可执行文件。

“arduino”的东西是关于一个不应该存在的外部变量(复制和粘贴代码问题)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2013-04-18
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多