问题标签 [name-mangling]

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 投票
1 回答
3461 浏览

c++ - c++ 的 64 位名称修改

我有一些代码,其中包含以下行

当我使用配置类型为 32 位的 C++ Visual Studio 2010(我也在 32 位 Windows 机器上)编译代码时,使用此代码的项目工作正常。

当我将机器更改为 64 位并使用使用 C++ Visual Studio 2010 编译的 x64 配置时,出现链接错误。

32 位和 64 位的 C++ 名称修改是否不同?如果是这样,我在哪里可以找到 64 位 C++ 名称修改约定?

0 投票
2 回答
1946 浏览

xcode - OpenCV 未解析的符号 - 名称修改不匹配 - xcode

我在运行 Lion 的 Macbook 上本地构建了 i386 风格的 OpenCV,方法是使用

库构建和发布良好,我已将它们添加到我的 xcode 项目中。但是,在构建我的测试应用程序时存在链接错误,它们似乎是名称修改问题。

Undefined symbols for architecture i386: "cv::namedWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from: _main in main.o "cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from: _main in main.o "cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)", referenced from: _main in main.o

以 cv::imread 为例,从 libopencv_highgui.dylib 导出,名称为:

而 main.o 正在引用符号

另一方面,__ZN2cv7waitKeyEi来自同一个 dylib 链接的函数很好。

测试应用程序和框架都适用于 i386 arch。

任何想法可能导致此问题?

0 投票
1 回答
419 浏览

c++ - Visual Studio 名称修饰“YAPEAV”和 Mysql 连接器

将我的代码与 MySQL Connector C++ 1.1.0 链接时,出现未解决的外部符号错误。
这是错误消息:

我曾经dumpbin在 mysqlconn-static.lib 中获取符号列表,并发现了一个类似的符号:

当这两行排成一行时,区别如下:

YAPEAVAND之间的名称管理有什么区别YAPAV

我有一个想法,我的问题与 MySQL 连接器库和我如何构建代码之间的不兼容有关。

我在网上搜索了一个针对 MySQL Connector 1.1.0 的错误,但它被更改为“不是错误”。

我正在使用 Visual Studio 2010 编译为使用 64 位平台的 32 位目标。
MySQL 连接器 C++ 版本为 1.1.0。

0 投票
2 回答
379 浏览

c++ - 外部常量链接规范似乎被 G++ 忽略了

我有一种情况,使用与此类似的 C++ 编译器构建 C 代码库:

库文件

库文件

主程序

由于C++03 Standard Annex C Compatibility C.1.2 Clause 3中指出的内容,我不得不添加 extern 。 (用编译-fpermissive将把它扫到地毯下。)

顺便说一句,它values在 objdump 中的显示方式在 objdump 之前是这样的extern

...然后添加后是这样的:

所以名称 mangling 被删除了,我们看到“L”变成了“G”,并且链接器不会抱怨values未定义。


现在想象两个非常相似的文件的相同情况,以相同的方式修改:

tmp-exttypes.h

a-lib.c

这些是项目中仅有的两个 Reb_To_RXT 定义,构建干净。但它没有链接,当我 objdump 提到它的唯一两个文件时,我得到:

它说 L,它的名字被破坏了。这并没有让这个简单得多的例子变得快乐。但是我想知道每次出现时都带有extern怎么会发生这种情况。我是否正确地相信这是一支确凿的证据……而且通常不应该发生仅声明为 extern 的东西在任何地方都不应该具有本地联系?

0 投票
1 回答
6355 浏览

gcc - GCC 函数后缀“isra”是什么意思?

在分析使用 gcc 编译的程序时,我注意到像foo.isra.3. 说明什么isra?我注意到其中一个函数仅在少数地方被调用,并且其中一个参数始终指定为文字值。也许这意味着它是针对某些参数优化的函数的变体?

0 投票
3 回答
573 浏览

c++ - 错误的函数名修改

我有一个导出函数的静态库

编译后它的名字被修改为

当我尝试使用它时,VS 返回错误

而且我不知道出了什么问题。为什么相同的功能会受到不同的破坏?我已经用相同的 Visual Studio 编译了两个项目,类有一个头文件。

请帮忙。

0 投票
1 回答
8206 浏览

gcc - GCC 函数后缀 .constprop 是什么意思?

查看 C++ 程序的反汇编,我看到了类似_Z41__static_initialization_and_destruction_0ii.constprop.221. constprop在这种情况下是什么意思?它在外观上似乎与isra后缀相似(有时还结合在一起,例如.isra.124.constprop.226),但它的含义不同。

0 投票
1 回答
1312 浏览

c++ - C++ 名称修饰在一个 so

这是我所做的:

我更改了一个 .h 文件

我重新编译了代码(没有问题),更改到 somelib.so(许多so 文件之一)。然后我用这个替换了设备上的旧so,加载so时出现以下错误: undefined symbol: _ZN13KeypathHelper11getCacheObjEv

现在奇怪的是,有人告诉我这个类只在这个so文件中使用(我怎样才能确定?)。我没有那么有经验,也不知道如何调查。欢迎任何建议。

更新

这个特殊问题是因为另一个so文件正在使用KeypathHelper类而我只替换了包含它的那个。我发现哪些其他需要更新的方法是对 KeypathHelper 进行 grep。

0 投票
1 回答
126 浏览

c - linux sparc so库中的名称修改

我有一些 sparc 库,我想拥有带有实名的导出函数列表。使用 objdump 或 nm 我得到类似__1cEnameIcopyType6MpnIASN1CTXT_rnLAsn1TObject_4_v___1cHsurname2t5B6M_v_这样的名称,以便 c++filt 无法对它们进行分解。我已经尝试过我的 nm 所拥有的每一种风格——gnu、lucid、arm、hp、edg、gnu-v3、java、gnat——结果是一样的。请你帮助我好吗?

0 投票
1 回答
398 浏览

c++ - 为什么在 exe 中发现名称错误?

我有一个 MS C/C++ 静态链接的发布 exe(没有调试信息),它不导出任何符号,但是当用十六进制查看器浏览它时,我看到类似

当然,它们是内部 C++ 模块提供的某些类/成员的错误名称。

他们为什么在那里?如何避免暴露他们?