C++链接错误在大多数情况下是最难确定的.即使在Visual Studio 2012中,链接器消息也很长,含糊不清并且带有错位符号,但最糟糕的部分是:没有帮助工具可以显示错误发生的位置,并且您可以花费很长时间来试图找出错误问题.是否有任何附加工具可以帮助确定链接器错误?
我对该工具的期望是在错误的行中打开相关的源文件,显示可以找到补救措施的二进制文件和依赖项的图表等.
例如,在多重定义符号的情况下,让工具打开在项目上下文中定义符号的所有位置,并提出解决方案.
我正在将我们所有的代码移植到 Apple M1 (ARM),我们的一些产品使用 FFmpeg。FFmpeg 是否有任何为 Apple Silicon M1 构建的库包,我在哪里可以找到它们?
找不到有关 的任何文档-Wno-four-char-constants,但我怀疑它与-Wno-multichar. 我对么?
为了使用 Xcode 将编译器选项迁移到 ARM,我正在寻找有关 clang c++ 编译器/链接器选项的综合文档。我能得到的最接近的是这个页面,但是:
-arch,-arch_errors_fatal,-sub_umbrella等等。-Wno-four-char-constants,-Wshorten-64-to-32等等。有什么地方可以找到对每个选项都有详尽解释的完整文档吗?请注意,我不需要在这里作为示例给出的选项的含义,仅用于综合参考。
我收到了"模糊调用"编译错误:
short i;
MyFunc(i+1, i+1);
Run Code Online (Sandbox Code Playgroud)
MyFunc有两个定义 - 一个带两个短裤,另一个带两个浮子.
我写的时候:
MyFunc(i, i+1);
Run Code Online (Sandbox Code Playgroud)
没有错误 - 编译器推断短.
我的问题是,为什么"短"+ 1可能会导致浮点,我怎样才能避免遍历所有代码并添加显式的强制转换,例如:
MyFunc((short)(i+1), (short)(i+1));
Run Code Online (Sandbox Code Playgroud)
谢谢.
这是一个不断演变的代码的真实故事。我们从基于此结构的许多类开始:
class Base
{
public:
virtual void doSomething() {}
};
class Derived : public Base
{
public:
void doSomething() override
{
Base::doSomething(); // Do the basics
// Do other derived things
}
};
Run Code Online (Sandbox Code Playgroud)
有一次,我们需要一个介于 Base 和 Derived 之间的类:
class Base;
class Between : public Base;
class Derived : public Between;
Run Code Online (Sandbox Code Playgroud)
为了保持结构,Between::doSomething()首先调用Base。但是现在Derived::doSomething()必须更改为调用Between::doSomething()...
这适用于 Derived 的所有方法,需要搜索和替换许多调用。
最好的解决方案是使用一些 this->std::direct_parent 机制来避免所有替换并允许轻松管理类拓扑。
当然,只有当有一个直接父级时,才应该编译。
有什么办法可以做到这一点吗?如果不是,这可能是 C++ 委员会的功能请求吗?
c++ ×4
clang ×2
build ×1
ffmpeg ×1
gcc ×1
gcc-warning ×1
inheritance ×1
macos ×1
migration ×1
xcode ×1