gpt4 book ai didi

c++ - 从 C++ 中未解析的外部调用 C 函数

转载 作者:太空狗 更新时间:2023-10-29 23:39:25 26 4
gpt4 key购买 nike

<分区>

我有一个 Visual Studio 解决方案,它必须从 C++ 代码调用遗留 C 代码,但我遇到了链接器错误。例如:

1>------ Build started: Project: testapp_soln, Configuration: Debug Win32 ------
1>legacy.lib(launchit.obj) : error LNK2019: unresolved external symbol "void __cdecl legacy_task(void)" (?legacy_task@@YAXXZ) referenced in function "public: virtual void __thiscall Launchit::DoIt(void)" (?DoIt@Launchit@@UAEXXZ)
1>E:\share\code\so\TestApp\testapp_soln\Debug\testapp_soln.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我有一个名为 legacy 的静态库项目,它带有一个 C++ 类,它启动时调用遗留 C 代码中的 C 函数。

这里是遗留项目的详细信息。

遗产.h:

#ifndef LEGACY_H_
#define LEGACY_H_

extern void legacy_task (void);

extern int initialise_thing();

#endif /* LEGACY_H_ */

遗产.c

#include "legacy.h"

void legacy_task (void)
{
/* doing things */
initialise_thing();
}

legacy_init.c

#include <stdio.h>

int initialise_thing()
{
printf("Doing init thing here\n");
return 0;
}

从 launchit 类调用的遗留 C 东西

启动.hpp

#ifndef LAUNCHIT_HPP_
#define LAUNCHIT_HPP_

class Launchit
{
public:
Launchit();
virtual ~Launchit();
virtual void DoIt();
};

#endif // LAUNCHIT_HPP_

启动.cpp

#include "Launchit.hpp"
#include "legacy.h"

Launchit::Launchit()
{
}

Launchit::~Launchit()
{

void Launchit::DoIt()
{
legacy_task();
}

然后我将其构建为静态库。它构建得很好。

我有一个这样的控制台应用程序项目:

#include "launchit.hpp"

int main() {
Launchit li;
li.DoIt();
}

但这给了我链接器错误:

legacy.lib(launchit.obj) : error LNK2019: unresolved external symbol "void __cdecl legacy_task(void)" (?legacy_task@@YAXXZ) referenced in function "public: virtual void __thiscall Launchit::DoIt(void)" (?DoIt@Launchit@@UAEXXZ)

如何修复此链接器错误?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com