1

我正在尝试将我的 AVR 跨目标应用程序链接到我的 AVR 跨目标库。该库名为 Lib328P,应用程序名为 LibTest。我已经构建了库并验证了 .a 存在于文件系统中。

我正在尝试通过右键单击项目>单击 C/C++ Build> Settings > AVR C++ Linker> Libraries 来链接库

这是控制台的输出。

**** 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 后缀。我已经在这样做了。任何帮助,将不胜感激。

谢谢!山姆

4

1 回答 1

1

在您的情况下,链接器期望找到该文件:

C:\Users\kempsa\indigo_workspace\Lib328P\libLib328P.a

你确定它出现在那个位置吗?还是在子文件夹中,可能是 Release 或 Debug?


这是对我有用的过程:

添加要与您的程序链接的库时,您需要输入两个条目。通过导航到以下位置可以在项目属性页面上找到这些条目:

C/C++ 构建 > 设置

在右侧窗格中,请务必在顶部下拉框中选择您正在构建的任何配置。(有时我会更改错误的配置,并想知道为什么这些更改似乎没有发生。)

在“工具设置”选项卡上是一个导航树。在该树上,选择

AVR C++ 链接器 > 库

右侧窗格中有两个列表框:库和库路径。这些是您添加两个条目的位置。

1.. 在顶部框中,单击加号或 + 图标。在这里您只需输入库基本名称。这是没有“lib”和没有“.a”的库名称

例如,我有一个“LibCore328v101”。
这将导致链接器查找文件“libLibCore328v101.a”

2.. 在底部框中,单击加号或 + 图标。在此处添加查找该库文件的路径。

2a. 您只需键入包含 .a 文件的文件夹的路径即可。

2b。您可以单击 Workspace... 按钮并导航到包含您的库的文件夹。如果您将库和程序保存在同一个工作区中,这是指定路径的更好方法。我用这个,在我的例子中这个文本是创建的

“${workspace_loc:/LibCore328v101/Release}”

这本质上是库的相对路径。这意味着您可以创建工作区的完整副本,并且包含的​​所有库仍然是正确的。

当您在控制台窗口中看到链接器输出时,您应该会看到这两个选项。在我的示例中,这些是:

-lLibCore328v101 (小写 ell) -L"F:\arduino-src\tt-wb-trunk-hg\LibCore328\Release" (大写 ell)

可以看到Eclipse插件已经将相对路径转换为当前绝对路径。链接器将在内部将“lib”和“.a”添加到库名称中。

您可以根据需要重复此过程添加任意数量的库和路径。

对于您的多目标程序,您为每个构建目标创建不同的配置。因此,您可以使用“DebugNano”“DebugTiny”等代替 Debug 和 Release。对于每个配置,更改库的路径。

于 2013-01-05T08:08:00.880 回答