gpt4 book ai didi

c++ - 从另一个 dll 链接动态 dll 会导致错误

转载 作者:行者123 更新时间:2023-11-30 03:58:44 27 4
gpt4 key购买 nike

我正在使用 Visual C++ 2013 构建一个项目,其中我有一个所有其他项目都应该包含的全局共享库。该库项目仅包含两个名为“utils.h”和“utils.cpp”的文件。

在 utils.h 文件中,我声明了以下代码。

#ifndef CLASS_UTIL
#define CLASS_UTIL

#ifdef _WINDLL
#if defined(LIBCIIEXPORTSHARED_STATIC)
#define LIBCIIEXPORTSHARED_API
#elif defined(LIBCIIEXPORTSHARED_EXPORTS)
#define LIBCIIEXPORTSHARED_API __declspec(dllexport)
#else
#define LIBCIIEXPORTSHARED_API __declspec(dllimport)
#endif /* LIBCIIFILE_STATIC */
#else //NOT WINDOWS DLL
#define LIBCIIEXPORTSHARED_API
#endif

#include "options.h"
#include "global_constants.h"
#include <stdlib.h>
#include <string>
#include <sstream>
#include <math.h>
#include <iomanip>
using namespace std;

LIBCIIEXPORTSHARED_API double _cdecl string_to_double(const std::string& s);
LIBCIIEXPORTSHARED_API double _cdecl strict_str2double(char* str);
LIBCIIEXPORTSHARED_API double _cdecl getParNm(int num, string* element);
LIBCIIEXPORTSHARED_API double _cdecl calcDistance(double* delta);
LIBCIIEXPORTSHARED_API double _cdecl calcDistance(double* coords1, double* coords2);
LIBCIIEXPORTSHARED_API double _cdecl calc_angle(double*, double*);
LIBCIIEXPORTSHARED_API void _cdecl correct_coordinates(double* coords, Options_t opt);
LIBCIIEXPORTSHARED_API double _cdecl getDN(double diameter, Options_t opt);

LIBCIIEXPORTSHARED_API string _cdecl get_support_direction(double *delta, string support_type, Options_t opt);
LIBCIIEXPORTSHARED_API string _cdecl getSupportDesc(double id);
LIBCIIEXPORTSHARED_API void _cdecl eraseSupport(string element[]);
LIBCIIEXPORTSHARED_API void _cdecl set_control_limits(string element[]);
LIBCIIEXPORTSHARED_API void _cdecl load_default_diameter_par(double *&nominal, double *&real, int &array_size);

#endif

然后在项目设置中,我在预处理器定义中包含了LIBCIIEXPORTSHARED_EXPORTS

在我的第二个项目中,这是另一个动态 dll,我只是包含了 utils.h 而没有定义LIBCIIEXPORTSHARED_EXPORTS,我得到了以下错误。

1>database_table.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) double __cdecl getParNm(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)" (__imp_?getParNm@@YANHPAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: void __thiscall DBtable::set_db_data(class Element_Manager *,class Bend *,struct Options_t)" (?set_db_data@DBtable@@QAEXPAVElement_Manager@@PAVBend@@UOptions_t@@@Z)
1>element.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) double __cdecl getParNm(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)" (__imp_?getParNm@@YANHPAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>database_table.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) double __cdecl calcDistance(double *)" (__imp_?calcDistance@@YANPAN@Z) referenced in function "public: void __thiscall DBtable::set_db_data(class Element_Manager *,class Bend *,struct Options_t)" (?set_db_data@DBtable@@QAEXPAVElement_Manager@@PAVBend@@UOptions_t@@@Z)
1>database_table.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) double __cdecl getDN(double,struct Options_t)" (__imp_?getDN@@YANNUOptions_t@@@Z) referenced in function "public: void __thiscall DBtable::set_db_data(class Element_Manager *,class Bend *,struct Options_t)" (?set_db_data@DBtable@@QAEXPAVElement_Manager@@PAVBend@@UOptions_t@@@Z)
1>element.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl correct_coordinates(double *,struct Options_t)" (__imp_?correct_coordinates@@YAXPANUOptions_t@@@Z) referenced in function "public: void __thiscall Element_Manager::set_data_from_file(class DBtable *,class CIIFile *,struct Options_t)" (?set_data_from_file@Element_Manager@@QAEXPAVDBtable@@PAVCIIFile@@UOptions_t@@@Z)
1>C:\Users\Nando\Documents\Projetos\05-rmc-ciiexport\code\Debug\libciifile++.dll : fatal error LNK1120: 4 unresolved externals

我检查过这两个项目都设置为使用 Unicode 字符集,并且第一个被标记为第二个项目的项目依赖项。

我还检查了 .h 目录是否包含在项目设置的附加包含目录

我需要更改 visual studio 设置的哪些内容才能链接 DLL?

提前谢谢你。

最佳答案

你缺少的是 dll 的 lib 文件所在的目录,以及要链接的 lib 文件的名称

添加您的 lib 文件的路径。通常(但不是必需)与您尝试链接的 dll 位于同一目录中。

配置属性 -> 链接器 -> 常规 -> 附加库目录

将lib文件添加到依赖列表

配置属性 -> 链接器 -> 输入 -> 附加依赖

关于c++ - 从另一个 dll 链接动态 dll 会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27279104/

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