问题标签 [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.
c++ - c++ 的 64 位名称修改
我有一些代码,其中包含以下行
当我使用配置类型为 32 位的 C++ Visual Studio 2010(我也在 32 位 Windows 机器上)编译代码时,使用此代码的项目工作正常。
当我将机器更改为 64 位并使用使用 C++ Visual Studio 2010 编译的 x64 配置时,出现链接错误。
32 位和 64 位的 C++ 名称修改是否不同?如果是这样,我在哪里可以找到 64 位 C++ 名称修改约定?
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。
任何想法可能导致此问题?
c++ - Visual Studio 名称修饰“YAPEAV”和 Mysql 连接器
将我的代码与 MySQL Connector C++ 1.1.0 链接时,出现未解决的外部符号错误。
这是错误消息:
我曾经dumpbin
在 mysqlconn-static.lib 中获取符号列表,并发现了一个类似的符号:
当这两行排成一行时,区别如下:
YAPEAV
AND之间的名称管理有什么区别YAPAV
?
我有一个想法,我的问题与 MySQL 连接器库和我如何构建代码之间的不兼容有关。
我在网上搜索了一个针对 MySQL Connector 1.1.0 的错误,但它被更改为“不是错误”。
我正在使用 Visual Studio 2010 编译为使用 64 位平台的 32 位目标。
MySQL 连接器 C++ 版本为 1.1.0。
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 的东西在任何地方都不应该具有本地联系?
gcc - GCC 函数后缀“isra”是什么意思?
在分析使用 gcc 编译的程序时,我注意到像foo.isra.3
. 说明什么isra
?我注意到其中一个函数仅在少数地方被调用,并且其中一个参数始终指定为文字值。也许这意味着它是针对某些参数优化的函数的变体?
c++ - 错误的函数名修改
我有一个导出函数的静态库
编译后它的名字被修改为
当我尝试使用它时,VS 返回错误
而且我不知道出了什么问题。为什么相同的功能会受到不同的破坏?我已经用相同的 Visual Studio 编译了两个项目,类有一个头文件。
请帮忙。
gcc - GCC 函数后缀 .constprop 是什么意思?
查看 C++ 程序的反汇编,我看到了类似_Z41__static_initialization_and_destruction_0ii.constprop.221
. constprop
在这种情况下是什么意思?它在外观上似乎与isra后缀相似(有时还结合在一起,例如.isra.124.constprop.226
),但它的含义不同。
c++ - C++ 名称修饰在一个 so
这是我所做的:
我更改了一个 .h 文件
到
我重新编译了代码(没有问题),更改到 somelib.so(许多so 文件之一)。然后我用这个替换了设备上的旧so,加载so时出现以下错误:
undefined symbol: _ZN13KeypathHelper11getCacheObjEv
现在奇怪的是,有人告诉我这个类只在这个so文件中使用(我怎样才能确定?)。我没有那么有经验,也不知道如何调查。欢迎任何建议。
更新
这个特殊问题是因为另一个so文件正在使用KeypathHelper类而我只替换了包含它的那个。我发现哪些其他需要更新的方法是对 KeypathHelper 进行 grep。
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——结果是一样的。请你帮助我好吗?
c++ - 为什么在 exe 中发现名称错误?
我有一个 MS C/C++ 静态链接的发布 exe(没有调试信息),它不导出任何符号,但是当用十六进制查看器浏览它时,我看到类似
当然,它们是内部 C++ 模块提供的某些类/成员的错误名称。
他们为什么在那里?如何避免暴露他们?