我正在尝试将我的AVR交叉目标应用程序链接到我的AVR交叉目标库。 该库名为Lib328P,应用程序名为LibTest。我已经构建了库并验证了文件系统中存在.a。
我试图通过右键单击项目来链接库>单击C / C ++ Build>设置> AVR C ++链接器>库将Lib328P添加到-l类别和“$ {workspace_loc:/ Lib328P}” 到-L类别
以下是控制台的输出。
**** Build of configuration Debug for project LibTest ****
make all
Building target: LibTest.elf
Invoking: AVR C++ Linker
avr-g++ -Wl,-Map,LibTest.map,--cref -L"C:\Users\kempsa\indigo_workspace\Lib328P" -mmcu=atmega328p -o "LibTest.elf" ./something.o -lLib328P
c:/arduino-0023/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: cannot find -lLib328P
make: *** [LibTest.elf] Error 1
**** Build Finished ****
我查看了其他帖子,他们建议删除lib和.a后缀。我已经这样做了。任何帮助将不胜感激。
谢谢! 萨姆
答案 0 :(得分:1)
在您的情况下,链接器期望找到文件:
C:\用户\ kempsa \ indigo_workspace \ Lib328P \ libLib328P.a
你确定它出现在那个地方吗?或者它是在子文件夹中,可能是Release或 调试?
这是适合我的过程:
添加要与您的计划关联的库时,您可以输入两个条目。通过导航到:
,可以在项目属性页面上找到这些条目C / C ++ Build>设置
在右侧窗格中,请务必在顶部下拉框中选择您正在构建的任何配置。 (偶尔我会对错误的配置进行更改,并想知道为什么这些更改似乎没有发生。)
在“工具设置”选项卡上是导航树。在该树上,选择
AVR C ++链接器>库
在右侧窗格中有两个列表框:Libraries and Libraries Path。这些是您添加两个条目的地方。
1 ..在顶部框中,单击加号或+图标。在这里只输入库基本名称。这是没有“lib”且没有“.a”
的库名例如,我有一个“LibCore328v101” 这将导致链接器查找文件“libLibCore328v101.a”
2 ..在底部框中,单击加号或+图标。在这里添加查找该库文件的路径。
2a上。您只需键入包含.a文件的文件夹的路径即可。
2B。您可以单击“工作空间...”按钮并导航到包含库的文件夹。如果将库和程序保存在同一工作区中,则这是指定路径的更好方法。我使用它,在我的例子中创建了这个文本
“$ {workspace_loc:/ LibCore328v101 /推出}”
这实际上是图书馆的相对路径。这意味着您可以创建工作区的完整副本,并且所有库包含仍然是正确的。
当您在控制台窗口中看到链接器输出时,您应该看到两个选项。在我的例子中,这些是:
-lLibCore328v101(小写字母) -L“F:\ arduino-src \ tt-wb-trunk-hg \ LibCore328 \ Release”(大写字母)
您可以看到Eclipse插件已将相对路径转换为当前绝对路径。链接器将在内部将“lib”和“.a”添加到库名称。
您可以重复此过程,根据需要添加尽可能多的库和路径。
对于多目标程序,可以为每个构建目标创建不同的配置。因此,不是Debug和Release,而是“DebugNano”“DebugTiny”等。对于每个配置,更改库的路径。