非高手莫入-交叉链接问题

DanXer 2002-08-28 12:40:41
我使用Watcom C\C++编译了一批C API.静态库(dblib.lib),16位版本。
使用VC1.5编写测试程序,但当链接到dblib.lib时产生一系列类似
error L2029: '_lock_open' : unresolved external错误。

当我使用工具察看dblib.lib的头时发现入口符号是"lock_open_",lock_open是我的一个C API.如何解决,高分相送。
...全文
77 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DanXer 2002-08-30
  • 打赏
  • 举报
回复
这个问题我已经解决,使用VC的.def文件IMPORTS字段。
punpuny 2002-08-28
  • 打赏
  • 举报
回复
在定义lock_open的头文件中加入
#ifdef (__cplusplus)
extern "C"
{
#endif

......

#ifdef (__cplusplus)
}
#endif
alexxing 2002-08-28
  • 打赏
  • 举报
回复
Watcom C 和 VC 的符号约定不同
Watcom 是在后面加 _,而 VC 及其它许多编译器是在前面加 _

有个编译选项,就是在 wcc.exe/wcc386.exe 后面加 -? 可以改变默认设置
N 年没用 Watcom 了,手头也没有 Watcom 软件,具体 ? 是啥实在记不住了
不过我记得是可以解决的,当年就曾将 Watcom C++ 和 BC++ 连接起来
DanXer 2002-08-28
  • 打赏
  • 举报
回复
这个已经有了。下面这样

#if defined(__cplusplus)
extern "C" {
#endif
int lock_open(int *);
int db_appinit(const char *, char * const *, DB_ENV *, u_int32_t));
int db_appexit(DB_ENV *);
int db_jump_set(void *, int));
int db_open(const char *,
DBTYPE, u_int32_t, int, DB_ENV *, DB_INFO *, DB **);
int db_value_set(int, int);
char *db_version(int *, int *, int *));
int db_xa_open(const char *,
DBTYPE, u_int32_t, int, DB_INFO *, DB **);
#if defined(__cplusplus)
}
#endif

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧