This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器:指向库函数的弱链接不会将库保留在最终输出/映射文件中

Guru**** 2611705 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/640472/compiler-weak-link-to-library-function-does-not-keep-library-in-final-out-map-file

工具/软件:TI C/C++编译器

我正在尝试在链接器时分离库的绑定,以便在应用程序和库之间建立弱绑定。  

我在库中有一个名为"GoMain"的函数。  如果我将其调用,则库将进入最终的二进制文件,并且它可以正常工作...但它们之间的链接感觉很强,因为如果GoMain移动,应用程序就必须知道它在哪里。  

因此,1) GNU _attributes ("章节...")可以将"GoMain"放在固定位置(例如0x80_0000,C64+x的SRAM)。  

2)可以实现函数指针,例如

void* MyFunc =(void*) 0x80万;  

MyFunc();//   不需要知道GoMain的地址,只需调用0x8万的函数。

在确保GoMain的库内置到最终输出文件中,但删除对"GoMain()"的直接调用时,是否可以执行此操作?

如果不是,动态链接是否是答案?  (我跟踪了一些关于这将如何工作的问题,但我不确定   答案)  

谢谢!

意愿

C6457

CCS 5.1 0900

CGT 7.3 23

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    GoMain如何移动? 它是在运行时移动,还是在固定的,未知的链路时间,地址上加载?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对不起,这似乎掩盖了原来的问题和问题;我想说GoMain()可以在没有GNU属性的情况下移动(章节)。 此外,必须有与库调用"GoMain()"的连接,整个输出文件才能包含库代码...否则,它将被转储。  我想包括 文本,数据等部分 ,即使“GoMain()” 不再直接与应用程序中的GoMain()调用引用。
     
    如何“自动”包含库代码,而不直接呼叫其中一个成员? 是否可以使用构建设置来完成? 当我创建指向固定地址的函数指针时,编译器/链接器看到没有链接,并且在生成*.out文件时,似乎丢弃了库中包含的所有信息。

    我的应用程序有一个单独的库的主要原因是一个多阶段引导方法,在这种方法中,GoMain()库在ROM中一直存在,直到我想加载它,然后调用"GoMain()"(即指向GoMain()地址的固定位置函数指针)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仍然对GoMain函数感到困惑。  链接完成后,是否位于固定地址且永不更改?  或者,GoMain的地址是否与RUN / RUN的地址不同?   

    如何"自动"包含库代码,而无需直接呼叫其成员之一?

    尝试链接器选项--UNDEF_SYM。  请阅读 C6000装配工具手册中的相关信息

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,George,

    在我的解决方案中,使用--UNDEF_SYM,我会使用GNU属性部分功能将GoMain()放置在一个固定位置。

    意愿