急!!高手过来看看,工程中添加另一项目的问题。

zhangjianwen 2002-06-25 05:04:37
因项目比较大,分工做完后,集成时,在工程中添加另一项目时,此项目的导出函数放在.h中,但在工程中不能找到此导出函数。连接时注意哪些事项?出错如下:
Compress.obj : error LNK2001: unresolved external symbol "void __cdecl gsm_destroy(struct gsm_state *)" (?gsm_destroy@@YAXPAUgsm_state@@@Z)
...全文
17 点赞 收藏 19
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
freelybird 2002-06-27
gsm.h文件恢复你原来的版本.


// Compress.h: interface for the CCompress class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_COMPRESS_H__45BCA3C5_349A_43FF_9DA6_C2AEDBFA22B5__INCLUDED_)
#define AFX_COMPRESS_H__45BCA3C5_349A_43FF_9DA6_C2AEDBFA22B5__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
//#include ".\gsm\GSM.H"

#define int long
#define SASR
#define GSM_H
#define NeedFunctionPrototypes 1

typedef short word; /* 16 bit signed int */
typedef int longword; /* 32 bit signed int */

typedef unsigned short uword; /* unsigned word */
typedef unsigned int ulongword; /* unsigned longword */

struct gsm_state {

word dp0[ 280 ];

word z1; /* preprocessing.c, Offset_com. */
longword L_z2; /* Offset_com. */
int mp; /* Preemphasis */

word u[8]; /* short_term_aly_filter.c */
word LARpp[2][8]; /* */
word j; /* */

word nrp; /* 40 */ /* long_term.c, synthesis */
word v[9]; /* short_term.c, synthesis */
word msr; /* decoder.c, Postprocessing */

char verbose; /* only used if !NDEBUG */
char fast; /* only used if FAST */

};

// #ifndef GSM_H
//#define GSM_H
//#define NeedFunctionPrototypes 1

// #ifdef __cplusplus
// #define NeedFunctionPrototypes 1
// #endif

//#if __STDC__
//#define NeedFunctionPrototypes 1
//#endif

//#ifdef _NO_PROTO
//#undef NeedFunctionPrototypes
//#endif

//#undef GSM_P /* gnu stdio.h actually defines this... */

//#if NeedFunctionPrototypes
//#define GSM_P( protos ) protos
//#else
//# define GSM_P( protos ) ( /* protos */ )
//#endif

//#ifdef NeedFunctionPrototypes
//#include <stdio.h> /* for FILE * */
//#endif

/* AUTO_SPARC_HACK added by John Walker. If defined, USE_FLOAT_MUL
automatically set when compiling on a Sparc. This lets most
people avoid editing the Makefile. */

//#ifdef AUTO_SPARC_HACK
//#ifdef sparc
//#define USE_FLOAT_MUL
//#define FAST
//#endif
//#endif

/*
* Interface
*/
#define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */

#define GSM_PATCHLEVEL 2
#define GSM_MINOR 0
#define GSM_MAJOR 1

#define GSM_OPT_VERBOSE 1
#define GSM_OPT_FAST 2

typedef struct gsm_state * gsm;
typedef short gsm_signal; /* signed 16 bit */
typedef unsigned char gsm_byte;
typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */


extern "C" gsm gsm_create (void);
extern "C" void gsm_destroy (gsm);

//extern void gsm_encode GSM_P((gsm, gsm_signal *, gsm_byte *));
//extern int gsm_decode GSM_P((gsm, gsm_byte *, gsm_signal *));
extern "C" void gsm_encode (gsm, gsm_signal *, gsm_byte *);
extern "C" int gsm_decode (gsm, gsm_byte *, gsm_signal *);


class CCompress
{
public:
CCompress();
virtual ~CCompress();
public:

gsm Gsm_create();
void Gsm_destroy(gsm TempGsm);

//int Gsm_print(FILE *, gsm, gsm_byte *);
//int Gsm_option(gsm, long, long *);

void Gsm_encode(gsm, gsm_signal *, gsm_byte *);
int Gsm_decode(gsm, gsm_byte *, gsm_signal *);

//int Gsm_explode(gsm, gsm_byte *, gsm_signal *);
//void Gsm_implode(gsm, gsm_signal *, gsm_byte *);

//#undef GSM_PGsm_explodeGsm_explodeGsm_explodeGsm_explodeGsm_explode
//#endif /* GSM_H */

};

#endif // !defined(AFX_COMPRESS_H__45BCA3C5_349A_43FF_9DA6_C2AEDBFA22B5__INCLUDED_)
回复
guopo 2002-06-26
gz!
回复
UDX协议 2002-06-26
gz
回复
zhangjianwen 2002-06-26
苦啊!
回复
zhangjianwen 2002-06-26
没人知道?
回复
zhangjianwen 2002-06-26
to freelybird(阿愚)
1、把这段代码移至.cpp文件中
void gsm_destroy P1((S), gsm S)
{……
} -----.cpp中。
2、gsm_destroy(...)这个函数的实现代码在哪? ----在另外项目B中,已
包含在此工程A中。
3、项目B已调试通过,编译工程A出现以上的错误,
4、如果是lib的话.
project->settings
Link页 Category: input中的 Object/library modules:
加上对应的XXX.lib文件---------不是lib文件,是另一项目B.
问题在哪?谢谢!

回复
freelybird 2002-06-26
我发现有点不对. 下面这段代码是在.h文件中吗?

#define P1(x, a) (a)
void gsm_destroy P1((S), gsm S)
{……
}

再次强调: 声明一般在头文件中, 它是属于内部连接.

把这段代码移至.cpp文件中
void gsm_destroy P1((S), gsm S)
{……
}
回复
freelybird 2002-06-26
兄弟,还没有解决呢?

你这是link时报的错.
怎么解决呢?
gsm_destroy(...)这个函数的实现代码在哪? 是obj还是lib或根本就没有该
函数的实现.

如果是lib的话.
project->settings
Link页 Category: input中的 Object/library modules:

加上对应的XXX.lib文件

总之,还是一句话. C中的编译过程是怎样的. VC的也一样(区别不大).
回复
zhangjianwen 2002-06-26
to all
1、没有生成dll
2、每个cpp模块单独编译通过后再整体连接.
3、头文件包已进来

在工程中添加另一项目时,此项目的导出函数放在.h中,但在工程中不能找到此导出函数。连接时注意哪些事项?出错如下:
Compress.obj : error LNK2001: unresolved external symbol "void __cdecl gsm_destroy(struct gsm_state *)" (?gsm_destroy@@YAXPAUgsm_state@@@Z)

gsm_destroy 里用了宏定义,
如下
#define P1(x, a) (a)
void gsm_destroy P1((S), gsm S)
{……
}
导出函数 extern void gsm_destroy GSM_P((gsm));
调用 gsm_destroy(TempGsm);编译出现以上错误,帮我啊!


回复
zhangjianwen 2002-06-26
都加了啊,Compress本来是用向导加的类啊。
回复
stzhou 2002-06-26
把Compress所在的目录加入vc环境的include中试一试,不行的话再把Compress所对应的文件add到当前工程中
回复
Rafaelkl 2002-06-26
GSM_P ?
gsm ?
回复
Rafaelkl 2002-06-26
导出时使用extern "C"看看

把你的头文件和类型定义都倒出来看看
回复
freelybird 2002-06-25
VC的编译与C基本一样,也是以XXX.cpp为单位的, 所以保证每个cpp模块
单独编译通过后再整体连接.

注意: 声明一般在头文件中, 它是属于内部连接.

至于出错了, 按照出错信息一步步把头文件包进来即可
回复
vc8 2002-06-25
是不是没有在setting 中加xxx.lib
回复
dingkl 2002-06-25
检查gsm_destory在哪实现,连接时没找到,
回复
zhangjianwen 2002-06-25
to cadinfo(无语清风)
Compress.cpp文件已包含在项目中,是不是在setting中有设置?
回复
cadinfo 2002-06-25
不是分别设置Active Project吗,
只要分开时正确,那么集成起来也是OK的呀!

看你的提示,检查当前项目中Compress.cpp文件有没有包含在项目中。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-06-25 05:04
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……