【问题标题】:unresolved external symbol CORBA server未解析的外部符号 CORBA 服务器
【发布时间】:2020-02-07 22:05:36
【问题描述】:

我正在尝试使用 OmniORB 创建一个服务器,并且我想创建几个 shared_ptrs。但是当我这样做时,我得到以下 2 错误

error LNK2019: unresolved external symbol __imp__invalid_parameter referenced in function "public: class std::shared_ptr<struct SharedPtr_i::Vector2> & __cdecl std::array<class std::shared_ptr<struct SharedPtr_i::Vector2>,1000>::operator[](unsigned __int64)" (??A?$array@V?$shared_ptr@UVector2@SharedPtr_i@@@std@@$0DOI@@std@@QEAAAEAV?$shared_ptr@UVector2@SharedPtr_i@@@1@_K@Z)
error LNK2019: unresolved external symbol __imp__CrtDbgReport referenced in function "public: class std::shared_ptr<struct SharedPtr_i::Vector2> & __cdecl std::array<class std::shared_ptr<struct SharedPtr_i::Vector2>,1000>::operator[](unsigned __int64)" (??A?$array@V?$shared_ptr@UVector2@SharedPtr_i@@@std@@$0DOI@@std@@QEAAAEAV?$shared_ptr@UVector2@SharedPtr_i@@@1@_K@Z)

我知道大多数这些“未解析的外部符号”是由于忘记导入 *.lib 文件造成的。但是据我所知,我的代码不需要额外的 .lib 文件。

这是导致我出现问题的代码:

#include "pch.h"
#include <array>
#include "sharedPtr.hh"

class SharedPtr_i : public POA_SharedPtr
{
private:
    struct Vector2
    {
        float x, y;
    };
public:
    inline SharedPtr_i() {}
    virtual ~SharedPtr_i() {}
    void CreateSharedPtr();
};

void SharedPtr_i::CreateSharedPtr()
{
    std::array<std::shared_ptr<Vector2>, 1000 > sharedPtrs;
    for (int i = 0; i < sharedPtrs.size(); i++)
    {
        sharedPtrs[i] = std::shared_ptr<Vector2>(new Vector2()); // This line caused the error
    }
}

在我的测试中,我发现括号 ([ ]) 导致了错误,但是括号如何导致未解决的外部符号错误?

非常感谢任何有关如何解决问题的建议。

【问题讨论】:

  • 很难推断代码隐藏在标题中而不是问题中的代码 - 您应该创建一个minimal reproducible example,以及它的编译和链接命令。
  • @TobySpeight 你是什么意思? sharedPtr.hh 只是我需要的服务器和客户端的接口。我可以和你分享,但我还没有把它变成我自己。 hh 文件是通过 IDL 编译器生成的。其他一切都只是服务器处理的东西,并且在 main() 函数中。没有问题。
  • 方括号如何导致无法解析的外部符号错误?您是否阅读了符号的名称(__imp__invalid_parameter)?
  • 您有 2 个不同的链接器错误。查看此链接以了解第一个错误。您的调试模式项目设置似乎存在不一致之处,即不同的标志等。social.msdn.microsoft.com/Forums/vstudio/en-US/…
  • @Sisir 谢谢!我在 Debug (x64) 上运行并在 C/C++ -> Code Generation中选择了 Multi-threaded DLL 而不是 Multi-threaded Debug DLL >.

标签: c++ c++11


【解决方案1】:

正如评论中指出的,与__imp__invalid_parameter__imp__CrtDbgReport 相关的链接器错误是在调试模式下构建项目时出现的,而宏/标志等其他设置与之不一致。

【讨论】:

    猜你喜欢
    • 2011-02-09
    • 2015-06-27
    • 2021-12-04
    • 2020-04-10
    • 2018-05-22
    • 2021-03-25
    相关资源
    最近更新 更多