C++ 运行时共享库能否调用现有符号?

C++ 运行时共享库能否调用现有符号?,c++,symbols,dylib,C++,Symbols,Dylib,我有: 应用程序A 动态库D 静态库S 其中: A在编译时与静态库S链接 D在编译时不链接S,但使用其头文件 A使用dlopen在运行时加载D 在A中运行时,D是否可以使用S中定义的符号,而不必在自己的编译时将D与S链接?即D能否访问全局命名空间中的符号 其他说明: 我需要D和A都能从S调用函数。 理想情况下,我不想改变S 我已经尝试过了,我得到了(当在D中使用来自S的符号时): 我认为这可能是: 现有函数“myFunction(int)”对共享库不可用(安全性?) 此函数的符号名称以不

我有:

  • 应用程序A
  • 动态库D
  • 静态库S
其中:

  • A在编译时与静态库S链接
  • D在编译时不链接S,但使用其头文件
  • A使用
    dlopen
    在运行时加载D
在A中运行时,D是否可以使用S中定义的符号,而不必在自己的编译时将D与S链接?即D能否访问全局命名空间中的符号

其他说明: 我需要D和A都能从S调用函数。 理想情况下,我不想改变S

我已经尝试过了,我得到了(当在D中使用来自S的符号时):

我认为这可能是:

  • 现有函数“myFunction(int)”对共享库不可用(安全性?)
  • 此函数的符号名称以不同的方式被名称损坏(编辑:使用
    extern“C”
    进行测试并排除此情况)
  • 也许我需要使用不同的设置进行编译,或者我必须始终将所有的S链接到D?如果S本身成为一个动态库,情况也会改变吗

    谢谢

    库中的外部引用使用该库的依赖项列表中的库以及以前使用RTLD_全局标志打开的任何其他库进行解析如果可执行文件与标志“-rdynamic”(或同义词“-export dynamic”)链接,则可执行文件中的全局符号也将用于解析动态加载库中的引用


    如果问题是名称损坏,请尝试在
    myFunction
    的函数声明中使用
    extern“C”
    禁用名称损坏。谢谢Radek,我现在根据您的建议排除了这种情况。这一定是一个符号可访问性问题。好的,这就解决了它!谢谢你!但我现在透露了下一个问题:应用程序中以前未使用的符号在链接阶段不包括在内。有免费的旗子吗--整个档案似乎是前进的方向,但还没有工作。
    dyld: lazy symbol binding failed: Symbol not found: __Z14myFunctioni