STM32 Eclipse + ARM GNU工具链错误链接器

时间:2015-04-23 07:25:40

标签: eclipse linker arm embedded stm32

我使用Eclipse + ARM插件来构建我的项目。当我需要在我的项目中使用StemWin库时,我将IDE配置为使用外部库。

我设定了 偏好 - > C / C ++一般 - >路径和符号

我在“图书馆路径”中添加了指向我文件夹的链接。 我还在“库”选项卡中添加了我的库的名称。 我检查了编译器选项卡中的设置,我确定一切都应该是好的。 当我尝试构建我的项目时,我收到了链接器的错误:

cannot find -lMyLib.a   Hello           C/C++ Problem

我仔细检查了我的图书馆名称和链接,一切正确。这是我的链接器的输出:

arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -L"C:\lib" 
-T"C:\arm_toolchain\stm32_workspace\Hello\LinkerScript.ld" -Wl,
-Map=output.map -Wl,--gc-sections -o "Hello.elf" @"objects.list" -lMyLib.a

我该怎么做?

3 个答案:

答案 0 :(得分:1)

链接器的-l选项的约定(比如你给-lMyLib.a作为链接器选项)是搜索一个前缀为给定名称的“lib”的库文件并附加.a(或.so),即您的命令行搜索文件libMyLib.a.{a,so},这可能不是它的名称。

您可以根据此约定重命名库,也可以将其提供给链接器命令行,省略-l(假设您的IDE允许这样做)。

答案 1 :(得分:1)

我之前遇到过同样的问题。

-l:STemWin526_CM4_GCC.a  
-L"C:\Edu_Workspace\STM32F4\stm32f4_bsp_template\Drivers\Middlewares\ST\STemWin\Lib"  

以上是我的工作设置。

使用-l:<archive file name>冒号:对于归档文件链接非常重要。

-L将包含库路径。 另外对于stemwin,请确保使用硬件浮点编译

-mfloat-abi=hard -mfpu=fpv4-sp-d16

答案 2 :(得分:0)

问题出现在-lMyLib.a中,这意味着您正在尝试将静态库链接为动态库。

要链接静态库,您必须像普通.o文件一样使用其路径:... /path/to/MyLib.a

并且生成的命令行应该类似于

arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -L"C:\lib" -T"C:\arm_toolchain\stm32_workspace\Hello\LinkerScript.ld" -Wl,-Map=output.map -Wl,--gc-sections -o "Hello.elf" @"objects.list" /path/to/MyLib.a

<强>更新

虽然它可能会解决问题但事实并非如此:

  

-llibrary

     

-l library

     

...   通常,以这种方式找到的文件是库文件 - 归档文件,其成员是目标文件。链接器通过扫描存档文件来处理存档文件,以查找已定义但尚未定义的符号的成员。但是,如果找到的文件是普通的目标文件,则以通常的方式链接。使用-l选项和指定文件名之间的唯一区别是-l使用'lib'和'.a'包围库并搜索多个目录。

https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html