Questions tagged [linker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

Filter by
Sorted by
Tagged with
0 投票
3 回答
2468 浏览

编译自定义 malloc

我编写了一个自定义库,它使用标准 C 原型实现了 malloc/calloc/realloc/free,并且我想出了如何将它编译为 so。我想通过链接标准应用程序来测试库?什么是这样做的好方法?一旦我有了一个工作库,我假设我可以使用 LD_PRELOAD 加载它,但是如何让我的函数与系统库共存但优先于系统库的函数?我的函数需要调用 malloc 才能让内存运行,所以我不能完全放弃 stdlib... 帮助?

0 投票
2 回答
5299 浏览

为什么在 solaris 10 上挂载“/lib/libc.so.1”?

为什么/lib/libc.so.1( linker/ loader) 总是挂载在Solaris 10? 我已经尝试过两者mountdf输出。它显示我/lib/libc.so.1进入。

0 投票
3 回答
2245 浏览

在 Visual Studio C++ 2008 Express 中使用 Boost Asio 构建应用程序时出现链接器错误

我刚开始使用 Visual Studio C++ 2008 Express 用 C++ 编写一个小型应用程序。我使用 Windows 安装程序安装了 Boost Library。编译程序时出现以下错误:

正在编译...
stdafx.cpp正在
编译...
websave.cpp
GoogleAuthenticate.cpp 正在
生成代码...
将清单编译到资源...
Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
版权所有 (C) Microsoft Corporation。版权所有。
链接...
链接:致命错误 LNK1104:无法打开文件“libboost_system-vc90-mt-gd-1_38.lib”

// GoogleAuthenticate.h

// GoogleAuthenticate.cpp

// websave.cpp

我检查了 boost/boost-1.38/lib 文件夹,并且 libboost_system-vc90-mt-gd-1_38.lib 在那里。还在项目的配置属性中的“其他包含目录”中添加了路径。

这里有什么遗漏的吗?

0 投票
1 回答
1505 浏览

将 ARMv7 库链接到 ARMv7s 应用程序

根据文献,A6 处理器将执行 ARMv7 代码。我的项目链接失败,因为为 ARMv7 构建了一个库,但该应用程序是为 ARMv7s 构建的。

一条典型的消息是(当我连接 iPad 4 (Retina) 或 iPhone 5 时):

我知道我可以通过从有效架构 (VALID_ARCHS) 中删除 ARMv7 来解决这个问题,但我不确定为什么,因为 A6 处理器可以执行 A5 目标代码。或者我可以为 ARMv7s 架构执行额外的库构建,但这需要更多的工作并且需要不同的磁盘目录结构。

将 ARMv7 库与 ARMv7s 应用程序链接起来有什么魔力吗?

0 投票
2 回答
5330 浏览

静态链接 MFC 库的问题

我有一个 Visual Studio 6 工作区,我正在尝试转换为 Visual Studio 2008 解决方案。所述解决方案的输出是一个.dll。它必须是 .dll 并且需要静态链接 MFC,因为我无法将 MFC 重新分发给现有客户。

该解决方案由三个项目组成,例如 A、B、C。C 是活动项目,输出 .dll 并依赖于 B。B 输出一个 .lib 并依赖于 A。A 输出一个 .lib。

在常规配置属性中,我将 A 和 B 设置为静态库 (.lib),将 C 设置为动态库 (.dll)。所有三个项目都设置为“在静态库中使用 MFC”。此外,所有三个项目都设置为运行时库的“多线程”,并且它们都没有定义 _AFXDLL。

一切都正确构建,直到我看到这个的最终链接阶段:

我已经用谷歌搜索了这个问题,并看到其他人有类似的问题,但似乎无法解决。我尝试将 nafxcw.lib 添加到 C 的 Ignored 库中,但这将这批链接器错误变成了 1500 多个未解决的符号错误。如果我让它动态链接 MFC,我可以让它编译/链接,但就像我说的,我需要它来静态链接。我觉得我错过了一些相当简单的东西,但似乎无法理解它。任何和所有随机的想法和想法将不胜感激。

0 投票
2 回答
449 浏览

对库的某些非内联方法的“未定义引用”错误

解决了这个问题后,我有了一个新问题:

情况:我有一个使用 C++ 编写的库的 C 项目。从 C 中只有对函数的调用,但是这些函数的实现使用类。

细节:

该库编译没有错误,但编译 C 项目返回以下错误:

一般的:

这通常表明缺少该库,但在这种情况下,我可以使用该库的大部分功能——只有在实现中使用了一些类时它才会失败。

这是一个例子:

在 C++ 库中:

开始.h

启动.cpp

初始化条件.h

从 C 调用:

由于该库是使用 构建cmake的,因此这是相关的部分CMakeLists.txt

(有很长的文件列表,.cpp.h已经缩短了一点)

注意:顺便说一句。仍然有一些非行方法调用没有这样的错误。

注意:此文件位于子目录中。它添加使用add_subdirectory(initialization)

注意: nm编译库列表包含:InitialCondition9SetMachICEd

为什么从 C 调用时没有引用这些方法——即使库已链接并且方法的实现可用?


编辑:

以下是用于 C 的命令:

编译:

关联:

Test.d包含所有文件的列表#include

0 投票
3 回答
7562 浏览

在 Debian Linux 中安装和链接 PhysX 库

我正在尝试让 PhysX 使用 Ubuntu 工作。

首先,我在这里下载了 SDK:


接下来,我提取了文件并安装了每个包:

这给了我位于 /usr/lib/PhysX/v2.8.1 中的以下文件:

  • libNxCharacter.so
  • libNxCooking.so
  • libPhysXCore.so
  • libNxCharacter.so.1
  • libNxCooking.so.1
  • libPhysXCore.so.1

接下来,我创建了指向 /usr/lib 的符号链接:


现在,使用 Eclipse,我指定了以下库 (-l):

  • libNxCharacter.so.1
  • libNxCooking.so.1
  • libPhysXCore.so.1

以下搜索路径以防万一(-L):

  • /usr/lib/PhysX/v2.8.1
  • /usr/lib

此外,正如 Gerald Kaszuba 所建议的,我添加了以下包含路径 (-I):

  • /usr/lib/PhysX/v2.8.1
  • /usr/lib

然后,我尝试编译以下代码:

我得到的第一个错误是:

NxPhysics.h:没有这样的文件或目录

这告诉我该项目显然没有正确链接。谁能告诉我我做错了什么,或者我还需要做什么才能让我的项目编译?我正在使用 GCC C++ 编译器。提前致谢!

0 投票
2 回答
59551 浏览

文件格式无法识别;使用 GCC 将其视为链接描述文件

我对 Makefiles 很陌生,我正在尝试将一个可执行文件从 3 个文件 file1.c、file2.c 和 file1.h 构建到一个名为 exFile 的可执行文件中。这是我得到的:

我已经在网上搜索了这种格式的 makefile,但我空手而归,所以我想知道是否有人可以提供帮助。当它尝试编译时,我得到:

我已经使用汇编文件编译了程序,但我不确定如何处理 c 文件或 file1.h 文件。file1.c 包括 file1.h 所以我必须链接它们(我想?)。任何建议或参考链接将不胜感激

0 投票
1 回答
542 浏览

链接器:如何将数据块放置在特定地址边界

这可能是一个简单的问题,但我是 GNU GCC 链接器文件的初学者(codesourcery arm-none-eabi ver 4.5.2)。

我必须在 ARM7 处理器和数据表中初始化 Mmu,据说 Mmu 页表必须位于 16kbyte (2^14) 边界。

现在我已经有了这个解决方案,但我几乎可以肯定这不是更有效的解决方案!

startall.o 是一个包含处理器初始化的程序集文件。
下一行,我将地址设置为 0x4000(2^14 的边界)。
MmuSdram0.o 包含 Mmu 页表。
然后按照固件的其余部分进行操作。
显然,这个解决方案让我在 startall 的结尾和 0x4000 之间有一个差距,这浪费了内存空间(我不喜欢浪费 ;-)

我会做的是将页面表放在 *(.text) 之后,但我不知道如何执行以下操作:
*(.text) "except" MmuSdram0.o
我更喜欢让链接器放置页面表在下一个可用的 2^14 边界,而不是自己修复地址。我检查了链接器文档,找到了 ALIGN 命令,但我不确定如何正确使用它,或者这是否适合我需要的命令......

提前致谢!

0 投票
1 回答
3136 浏览

重复符号错误 - 全局变量

所以我有三个文件:

运行后make,我收到以下错误:

string 1内声明jarvismarchtools.cjarvismarchtools.h包含在jarvismarchtools.c以及 中jarvismarch.c

关于如何解决此错误的任何想法?

jarvismarchtools.h

jarvismarchtools.c


15 30 50 per page
1
2 3 4 5
1498226