【问题标题】:What could cause "can't link with a main executable" on a shared library?什么可能导致共享库上的“无法与主可执行文件链接”?
【发布时间】:2010-11-17 18:10:47
【问题描述】:

在编译时尝试将预编译库链接到主文件时,我收到“无法与主可执行文件链接”。

hostname:folder user$ g++ -o add testadd.cc -ladd -lmultiply -L.
ld: in ./libmultiply.dylib, can't link with a main executable
collect2: ld returned 1 exit status
hostname:folder user$ 

之前编译的两个库(加法和乘法)都存在于同一目录中。

谁能给我一个提示,什么会导致这个错误?

感谢

PS:OSX 10.6.4 与 g++-4.2.1

【问题讨论】:

  • 请向我们展示您如何构建库 - 编译和链接命令。
  • 您是否在您的某个库中定义了 main() 函数?

标签: c++ macos linker


【解决方案1】:

仅供参考:

当使用编译器开关 -dynamiclib 时出现上述错误, 尝试使用 -dynamiclib -undefined dynamic_lookup 编译。

对我来说,这很有效。 :)

【讨论】:

    【解决方案2】:

    好像有人遇到过类似问题:ld can't link with a main executable

    【讨论】:

      【解决方案3】:

      我摆弄了一下,显然我修好了它......

      在我用

      编译共享库之前
      g++ -o libmultiply.dylib libmultiply.cc -dynamiclib
      

      并收到上述错误。现在我再次重新编译了lib,使用

      g++ -o libmultiply.dylib libmultiply.cc -dynamiclib -undefined dynamic_lookup
      

      它现在似乎可以工作了。 (至少是编译和链接。) 但我仍然需要检查 lib 是否真的做了它应该做的事情。 ;)

      到目前为止,我不知道为什么链接现在不报告错误,但也许其他人可以通过这些信息对此有所了解。 =)

      只有我的 2 克拉。

      【讨论】:

        猜你喜欢
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 2019-11-16
        • 2020-02-18
        • 2021-06-16
        相关资源
        最近更新 更多