问题标签 [linkage]

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.

0 投票
3 回答
167 浏览

cakephp - CakePHP 模型链接中的对象有多广泛?

我希望对 CakePHP 有所了解的人可以对我一直遇到的问题有所了解。

这是我的场景,我有一个Userthis Userhas a Companywhich 又有很多Department很多Address。如果我得到一个User,我可以期望访问Company与它相关的所有模型Company吗?

那么会$user['Company']['Department'][0]$user['Company']['Address'][0]可能吗?

这让我回到了最初的问题,模型之间的联系有多广泛?

0 投票
2 回答
241 浏览

c++ - 与继承类的链接错误

我有静态库和另一个使用它的程序。

在静态库中,如果我在没有继承的情况下定义标题,它可以正常工作。

另一方面,如果我对 QT 类使用 inheretence,

编译使用此静态库的代码时出现链接错误。

可能是什么问题?谢谢。

0 投票
2 回答
178 浏览

c++ - 如何使用 C 链接构建一些具有未指定链接的 C++ 函数?

这是让我相当困惑的事情。

我有一个实现一组函数的 C++ 文件,以及一个为它们定义原型的头文件。

使用 Visual Studio 或 MingW-gcc 构建时,我在其中两个函数上出现链接错误,添加“extern "C"”限定符解决了该错误。这怎么可能?

头文件,“some_header.h”:

C++ 文件,“some_implementation.cpp”

实现编译时没有警告,但是当与调用这些的 UI 代码链接时,我得到一个正常的

现在真正让我感到困惑的是,似乎只有这两个函数(HandleStart 和 CheckValid)是用 C 链接构建的。仅为这两个显式添加“extern 'C'”声明解决了链接错误,并且应用程序构建并运行。在其他一些函数上添加“extern 'C'”,例如 HandleEnd,会引入一个新的链接错误,因此显然编译正确。

实现文件永远不会被修改,只有原型。

0 投票
2 回答
134 浏览

c++ - c ++静态不会链接

你能帮我吗?以下代码:

产量:

为什么?

0 投票
4 回答
7163 浏览

c++ - 模板外部链接?谁能解释一下?

模板名称具有链接 (3.5)。非成员函数模板可以有内部链接;任何其他模板名称应具有外部链接。从具有内部链接的模板生成的实体不同于在其他翻译单元中生成的所有实体。

我知道使用关键字的外部链接

前任 :

但他们给出 的模板不得有 C 链接

上述声明的实际含义是什么?

谁能解释一下?

0 投票
1 回答
463 浏览

iphone - 将 Three20 与另一个库和冲突的链接标志一起使用

我正在尝试将 Three20 添加到我的项目中,但是 -ObjC 和 -all_load 标志正在与我正在使用的另一个库混淆。另一个库是用于条码读取的 ZXingWidget,但我认为这部分无关紧要。

我有理由确定答案是使用 force_load 而不是 all_load 然后指向我的 three20 库,但我无法让它工作。

这是我现在使用的:

但是我立即得到一个 errno=22 构建失败。

即使我让 force_load 工作, -ObjC 标志本身也会引起问题。我应该如何为不同的库设置不同的标志?我看不到将构建标志放在实际库上的方法。

编辑:所以我刚刚添加了带有强制加载的每个 .a 库,它会编译,但它仍然给了我无法识别的选择器,其中包含来自 Three20 的一些内部调用,这是我在执行 force_load 之前所拥有的。是否有我缺少的库,或者我做错了?

0 投票
2 回答
6174 浏览

c - 与 C 中的 static 关键字的内部链接

我知道static是 C 中的重载关键字。在这里,我只对将其用作强制内部链接的关键字感兴趣。

如果您在文件中声明了一个全局变量,那么 using和 not using有什么.c区别?无论哪种方式,没有其他文件可以访问该变量,因此该变量基本上是文件的“私有”,有或没有 static 关键字。staticstatic.c

例如,如果我有一个文件foo.c,并且我声明了一个全局变量:

int x = 5;

该变量x仅可用于内部代码foo.c(当然,除非我在某些共享头文件中使用extern关键字声明它)。但是,如果我不在头文件中声明它,那么如果我输入以下内容会有什么区别:

static int x = 5.

无论哪种方式,这里似乎x都有内部联系。所以我static对这方面的目的感到困惑。

0 投票
3 回答
1974 浏览

c++ - 各种 const/static 变量的链接

我对以下变量的联系有一些疑问。通过 C++03 7.1.1/7 的示例和编译器(Comeau、Clang 和 GCC)的实验,我得出以下链接类型:

  1. 首先static,然后extern

    根据第 3.5 节,我很清楚:(a)意味着内部联系。并且(b)也暗示了内部链接,因为名称“a”被声明为静态(由(a))。

  2. 首先extern,然后static

    首先,(c)意味着外部联系。但是(d)意味着内部链接,因为名称“b”被(d)声明为静态。根据 7.1.1/7,这是无效的,因为隐含的链接不一致。

  3. 首先const,然后extern

    首先,(e) 暗示了内部链接,因为它是 const 的,既没有显式声明 extern,也没有先前暗示的外部链接。并且 (f) 应该暗示外部链接并且是一个错误,因为它显式声明了名称 extern,但编译器将其保留在内部!为什么这样? 那是我的问题。

  4. 首先extern,然后const

    现在,(g) 暗示了外部链接,因为我们明确声明了 extern。并且 (h) 也意味着外部链接,因为 (g) 显式声明了 extern。


我已经通过以下模板通过实验发现了 3 和 4 的链接(第二个参数需要具有外部链接)


总结:查尔斯·贝利的讨论结果非常有成果,并表明有两种可能的解释3.5/3,其中重要的要点是

具有命名空间范围 (3.3.5) 的名称如果是

  • 显式声明为 const 且既未显式声明 extern 也未先前声明具有外部链接的对象或引用;

如果我们看点(f),那么两种解释会得出不同的结论,如下图所示

  1. 第一个解释说明pi1是声明const的,但也是声明extern的。因此,该变量具有外部联系。

  2. 第二种解释将“已声明”的两次出现解释为指代相同的声明。这样,它意味着它是声明const的,而不是extern const声明的。我们注意到(e)是声明的const而不是声明的extern const,因此我们给出了pi1内部链接。

现在什么解释是正确的?我无法从该措辞中确定,但编译器似乎以第二种方式解释了这一点。特别是,如果我们采用第一种解释,那么最后引用的部分3.5/3将是多余的,因为不会有一个有效的场景,其中一个名称将被声明const并且之前声明了外部链接但没有显式的extern.

0 投票
1 回答
759 浏览

c - 如何在 C99 中将函数定义为内联内部和外部副本

我的库包含一个内部和外部都使用的函数。该函数是如此之小,以至于我希望编译器在调用内部函数时尝试内联函数。因为函数使用了不完整类型的信息,外部调用不能被内联。所以我的模块也应该始终包含具有外部链接的函数的副本。

我想我找到了以下解决方案,但希望得到您的建议:

通常我会反过来使用 inline 或者只static inline在头文件中放置一个函数。但正如解释的那样,这在这里是不可能的。

这种方法是否给出了预期的结果?有没有人看到这种方法有任何缺点(它是便携式 C99)吗?

0 投票
3 回答
517 浏览

c++ - 需要的c++标准库中的所有函数都有外部链接吗?

所以我有一个可以在 windows、linux 和一些 unix 变体上编译的应用程序。当我遇到障碍时,我最近决定将它移植到 OSX。

我有一个看起来像这样的模板:

这个想法是防止符号扩展在给定上述输入值时使某些实现崩溃0x7f。它通常这样使用:

不幸的是,这在 OSX 上不起作用(使用 gcc 4.2)。该错误与std::isspace没有外部链接有关,因此不适用于模板。事实证明,在 OSX 上,ctype.h标头具有标记的所有功能(通过宏)static inline

这是我的问题:

任何相关标准是否允许 C++ 中的函数(在这种情况下是从 C 继承的部分)标准库中没有外部链接?

编辑:

我收到了苹果的回复。显然他们有一个宏来控制这种行为。定义_DONT_USE_CTYPE_INLINE_防止 ctype 函数是静态内联的。