问题标签 [linker-flags]

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 投票
0 回答
465 浏览

c++ - xcode 6编译失败其他链接器标志ObjC

我的任务是维护一个最初为 iOS5 开发的相当大的项目。

它具有以下链接器标志:-force_load -ObjC -lc++

尝试编译项目时得到的结果:

ld:找不到文件:-ObjC clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

对这个有帮助吗?对此的任何帮助都非常感谢

基本上

0 投票
1 回答
273 浏览

ios - AWS 开发工具包链接器标志与导入的项目冲突

我已经成功使用 AWS SDK 框架获得了一个应用程序,现在我正在尝试将一个静态库作为自制框架导入,并与我的其他几个项目共享代码。

问题是:为了导入我的静态库,我需要添加-ObjC链接器标志以导入库,但是每当我添加该链接器标志时,AWS都会吓坏并给我 40 多个红色编译错误。

我对链接器标志和库导入完全陌生,所以我真的不知道从哪里开始。我做了一些研究,但我能找到的最好的线索是我可以使用的建议,-force_load而不是-ObjC,但这似乎需要在 Build Phases 部分手动添加每个“.m”文件,而我的库包含数百个这样的文件文件。

这个问题有没有比添加每个文件更简单的解决方案以便我可以使用-force_load?我怎样才能让 AWK SDK 和导入我的库的需求一起很好地发挥作用?

编辑:根据评论中的建议,这是我添加-ObjC链接器标志时遇到的错误。如果没有该标志(并且没有添加静态库),应用程序将使用AWSiOSSDKv2框架成功编译。但是添加该链接器标志(据我了解,静态库需要它,但甚至在添加该库之前)会立即导致:

[删除代码以适应字符限制]

编辑 2:根据 Yosuke Matsuda 的回答,我添加了libsqlite3.dylib,我错过了。现在以前的错误已经消失了,但是我有几十个(几百个?)“重复符号”行,以一个红色的“链接器命令失败,退出代码 1”错误结束。(我会把它们都包括在内,但有趣的是,他们把我的帖子放在了 73,111 个字符上,远远超过了 30,000 个字符的限制。)

有趣的是,它们似乎是由于框架本身的要求引起的冲突(例如,AWSCore在 AWS Framework 中需要Bolts框架,但它们似乎与一堆重复的符号冲突?)。

而且,和以前一样,只需-ObjC从链接器标志中删除即可让应用程序正常编译并成功。

0 投票
2 回答
7813 浏览

objective-c - 如何在 Xcode 中将库与“-force_load”链接?

我的其他库不允许我设置 -ObjC 或 all_load 标志。所以我需要使用 -force_load 来链接我的库。

我的项目下有“GoogleOpenSource.framework”和“GooglePlus.framework”,所以我怎样才能正确地将它们映射到工作。

我设置了这样的路径:

在其他链接器标志下,但它不起作用。

我在这里做错了什么?

0 投票
2 回答
4770 浏览

c++ - Gcc hide visibility of symbols coming from included static library

I have:

  1. a shared library, say libShared.so, which contains a class Bar, with a method int Bar::do(int d) const
  2. a static library, say libStatic.a, which contains a class Foo, with a method int Foo::act(int a) const.

The code of Bar is something like this:

libShared.so is compiled with flag -fvisibility=hidden.

The problem is the following: I execute Linux command nm -g -D -C --defined-only libShared.so, and it results that class Foo, along with its method, is visible outside libShared.so, despite having told to the compiler to hide everything except what is marked as "public" (infact, they are marked as "T" by nm).

How can I avoid this? I want libShared.so not to expose symbols coming from its dependencies.

Thanks

0 投票
0 回答
163 浏览

c - 也允许对定义的符号使用链接器 -wrap 标志

我读过链接器“-wrap”标志,仅适用于未定义的符号。这会导致它无法在同一文件中正常调用函数。

有没有办法让“-wrap”对已知符号起作用?或者导致编译器将特定/所有符号标记为未定义(尽管它们在同一个文件中)?

由于评论而编辑:

例如:

我希望对函数 foo() 的每次调用都转到 __wrap_foo 。因此,我将标志 -Wl,-wrap,foo 添加到链接器中。如果 foo 是从与定义它的文件不同的文件中调用的 - 它工作正常。但是,如果从同一个文件中调用它 - 不会调用包装器

0 投票
1 回答
2555 浏览

gcc - gcc:错误:无法识别的选项--wrap

[更新] 很抱歉在上面发帖,但首先知道这一点可能会有所帮助,因为它可能会改变问题。

--wrap是链接器的一个选项,ld而不是gcc.

但是我的 Eclipse 项目gcc用于链接阶段。

如何根据cmocka单元测试的需要使用包装函数?


我正在使用gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3.

我正在尝试使用此处--wrap指定的链接器选项,以便使用cmocka对 C 代码进行单元测试。

错误是

所以,链接器抱怨这个--wrap=add选项,但我不知道为什么。


不可避免地,如果我不发布代码,有人会要求它,所以它就是这样,即使我怀疑它与链接器选项问题有关:

在我的单元测试主体中,我有

在另一个文件中,我声明了模拟函数

并且,在我的待测软件中,调用了要包装的函数

请注意,add()在构建中的任何地方都没有调用函数。我想要实现的是使用__wrap_add链接器选项来模拟该功能。为什么链接器拒绝它?

0 投票
2 回答
406 浏览

ios - 将 Google Maps SDK 与 Parse.com 项目 iOS Swift 结合使用

我正在使用 Parse SDK(parse.com)处理数据的项目(xcode 6.3+,swift)。最近,我们决定使用 google maps sdk 使用方向 API 为用户提供方向。因为你可以在没有谷歌地图的情况下使用这个 API,所以我开始集成它。这是我第一次使用 cocoapods,所以我按照说明开始玩。

pod init创建 pod 规格文件

这是我的配置来自谷歌入门指南

pod install,然后使用.xworkspace

我直接尝试构建项目,它返回 34 个错误。错误的类型始终相同:Apple Match-O Linker Error

在此处输入图像描述

在此处输入图像描述

所以我开始看谷歌,因为我在一个空白项目上做了同样的事情,一切都很好。

我开始查找有关使用 Parse SDK 会导致与 GoogleMaps 需要工作的 -ObjC 链接器标志冲突这一事实的信息。大多数答案给出了两种可能的解决方案:

1.添加Facebook-iOS-SDK框架

使用 facebook 提供的框架以及使用 cocoapods 进行了尝试。不工作。我仍然有错误。

2. 通过将 -ObjC 标志替换为以下内容来强制加载 GoogleMaps 框架

这也会返回一个错误: 在此处输入图像描述

所以现在我对解决这个问题的方法很迷茫。有没有人找到将 GoogleMaps SDK 与 Parse 集成的方法?

更新

我尝试了一种不同的方法,即在没有 cocoapods 的情况下注入 GoogleMaps。为此,我使用了这种方法:GoogleMaps without CocoaPods

它似乎可以正确集成,但 -ObjC 标志仍然存在。使用

现在正在响应但导致duplicate symbols for architecture x86_64错误。似乎无法找到解决该问题的方法。

0 投票
0 回答
366 浏览

gcc - 检查链接器脚本中的输出文件大小

我正在试验 GNU LD 链接器脚本,我已经使用MEMORY命令定义了两个内存块,如下所示:

这将检查我在每个内存块中插入的部分是否适合指定的大小,但我还想检查输出文件大小是否不超过 256kB。有没有办法从链接描述文件中做到这一点?

0 投票
0 回答
445 浏览

python - C++ 混合静态和动态链接 (Msys2 Qt)

我正在使用 MSyS2 开发运行良好的 Qt/C++ 程序。我现在遇到了静态链接不起作用的问题,因为 Python(我在我的代码中使用)不提供静态库(只有一个共享库)。我将错误跟踪到包含链接器开关的创建的makefile:

我发现删除它并添加

做我想做的事:静态链接除 Python 部分之外的所有内容。问题是,一旦我为项目重新运行 qmake,我的更改就会被覆盖。我没有找到摆脱“-static”的解决方案,它似乎是由 qmake 添加的,不能被 .pro 文件删除。

是否有摆脱“-static”开关的解决方案?

不幸的是不起作用:-(。

Win7 Pro 64 位、Qt5.5、Mingw GCC 5.3.0、Python 3.5.0

0 投票
1 回答
690 浏览

c++ - 我可以对我的柯南包的用户隐藏我的链接标志吗?

假设我有一个库作为包上传到conan中,它使用 OpenGL,因此GLCMakeLists.txt. 图书馆的用户是否需要再次明确链接到 GL?柯南是否提供了一种方法来跟踪它并将其包含在 中${CONAN_LIBS}

我在文档中找到的最接近的东西是 method package_info,您似乎可以在其中指定链接器额外选项,但我似乎没有在我的库中正确使用它conanfile.py。我尝试了所有:

但是如果在用户代码中我没有放置链接标志,它会引发对 GL 方法的“未定义引用”。

编辑:我在 linux mint 17 中工作。