2015-04-23 100 views
0

我使用Eclipse + ARM插件来构建我的项目。当我需要在我的项目StemWin库中使用时,我将我的IDE配置为使用外部库。 我设置首选项 - > C/C++常规 - > Pahs和符号 我添加到“库路径”链接到我的文件夹包括库。 其次,我在标签库“库”中添加我的库的名称 我检查了编译器选项卡中的设置,我确定所有应该是好的。 当我尝试构建我的项目时,出现链接器错误。STM32 Eclipse + ARM GNU工具链错误链接器。

找不到-lMyLib.a你好C/C++问题

我检查我的图书馆和链接的名称,都是正确的。这是我的连接器的输出:

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

也许某人有同样的问题。 Best regarts。

回答

1

我之前遇到过同样的问题...
-l:STemWin526_CM4_GCC.a
-L “C:\ Edu_Workspace \ STM32F4 \ stm32f4_bsp_template \ DRIVERS \中间件\ ST \ STemWin \ Lib文件”
以上是我工作设置。 与-l:冒号':'对档案文件链接很重要
而-L将包含库路径。 对于stemwin,请确保使用硬件浮点编译 -mfloat-abi = hard -mfpu = fpv4-sp-d16

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 

UPDATE:

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

-llibrary

-l库

... 通常情况下,文件中可以找到这样的库文件,归档文件,其成员为目标文件。链接器通过扫描档案文件来处理定义到目前为止被引用但未定义的符号的成员。但是,如果找到的文件是普通的目标文件,它将以通常的方式链接。使用-l选项和指定文件名的唯一区别在于-l使用'lib'和'.a'围绕库并搜索多个目录。

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

+0

这与“静态”或“动态”库无关。具有'-l'的约定对于两者都是相同的。 – mfro

+0

酷,总是很高兴学到新东西 – dekkard

1

的约定接头的-l选项(说你给-lMyLib.a作为一个连接器选项)将要搜索与“lib”预先计划在给定的名称和.a库文件(或.so),即您的命令行搜索文件libMyLib.a.{a,so},这可能不是它的命名方式。

要么根据这个惯例重命名你的库,要么给它的链接器命令行省略-l(假设你的IDE允许你这么做)。

+0

感谢您的回答。问题解决了。 – MarCovy