找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 1736|回复: 15

符号表遇到的问题

[复制链接]

15

主题

39

回帖

246

积分

用户组: 中·技术宅

UID
5832
精华
0
威望
2 点
宅币
188 个
贡献
0 次
宅之契约
0 份
在线时间
39 小时
注册时间
2020-4-15
发表于 2020-5-17 18:06:33 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
本帖最后由 chaw899 于 2020-5-17 18:10 编辑

参照下面这篇文章做的
http://blog.sina.com.cn/s/blog_4e3c6b480102zjsq.html
编译通过了,链接的时候报下面的错误。
我查了目标文件的符号,是这个符号lua_pushstring。

报错的是这个符号_imp__lua_pushstring

这2种符号是不一样的吗?
前面的是dll的符号表,后面的是给exe用的符号表吗?






lfs.o:lfs.c:.text+0x6e): undefined reference to `_imp__lua_pushstring'
lfs.o:lfs.c:.text+0xc7): undefined reference to `_imp__lua_pushstring'
lfs.o:lfs.c:.text+0xdc): undefined reference to `_imp__lua_pushstring'
lfs.o:lfs.c:.text+0xf6): undefined reference to `_imp__lua_pushstring'
lfs.o:lfs.c:.text+0x26e): undefined reference to `_imp__lua_pushinteger'
lfs.o:lfs.c:.text+0x29e): undefined reference to `_imp__lua_pushinteger'
lfs.o:lfs.c:.text+0x2ce): undefined reference to `_imp__lua_pushinteger'
lfs.o:lfs.c:.text+0x2fe): undefined reference to `_imp__lua_pushinteger'
lfs.o:lfs.c:.text+0x32f): undefined reference to `_imp__lua_pushinteger'
回复

使用道具 举报

30

主题

211

回帖

2790

积分

用户组: 版主

UID
1821
精华
7
威望
69 点
宅币
2170 个
贡献
206 次
宅之契约
0 份
在线时间
481 小时
注册时间
2016-7-12
发表于 2020-5-17 18:30:20 | 显示全部楼层
编译,链接环境是什么 直接使用的makefile么
回复 赞! 靠!

使用道具 举报

15

主题

39

回帖

246

积分

用户组: 中·技术宅

UID
5832
精华
0
威望
2 点
宅币
188 个
贡献
0 次
宅之契约
0 份
在线时间
39 小时
注册时间
2020-4-15
 楼主| 发表于 2020-5-17 18:35:29 | 显示全部楼层
Ayala 发表于 2020-5-17 18:30
编译,链接环境是什么 直接使用的makefile么

可以用makefile,编译环境mingw
回复 赞! 靠!

使用道具 举报

30

主题

211

回帖

2790

积分

用户组: 版主

UID
1821
精华
7
威望
69 点
宅币
2170 个
贡献
206 次
宅之契约
0 份
在线时间
481 小时
注册时间
2016-7-12
发表于 2020-5-17 19:40:01 | 显示全部楼层
没包含 lua$(LUA_VERSION).lib 吧
回复 赞! 靠!

使用道具 举报

15

主题

39

回帖

246

积分

用户组: 中·技术宅

UID
5832
精华
0
威望
2 点
宅币
188 个
贡献
0 次
宅之契约
0 份
在线时间
39 小时
注册时间
2020-4-15
 楼主| 发表于 2020-5-17 20:00:55 | 显示全部楼层
Ayala 发表于 2020-5-17 19:40
没包含 lua$(LUA_VERSION).lib 吧

谢谢提醒,我再试试看。
回复 赞! 靠!

使用道具 举报

30

主题

211

回帖

2790

积分

用户组: 版主

UID
1821
精华
7
威望
69 点
宅币
2170 个
贡献
206 次
宅之契约
0 份
在线时间
481 小时
注册时间
2016-7-12
发表于 2020-5-17 20:08:22 | 显示全部楼层
chaw899 发表于 2020-5-17 20:00
谢谢提醒,我再试试看。

你直接编译的lua的源代码还是使用的lua的 lib或者lua的dll? 源代码的话就不需要包含,但是需要重新编译lua的文件 然后链接 后面的只需要包含头文件 链接的时候选择lua 的lib
回复 赞! 靠!

使用道具 举报

15

主题

39

回帖

246

积分

用户组: 中·技术宅

UID
5832
精华
0
威望
2 点
宅币
188 个
贡献
0 次
宅之契约
0 份
在线时间
39 小时
注册时间
2020-4-15
 楼主| 发表于 2020-5-17 21:12:54 | 显示全部楼层
Ayala 发表于 2020-5-17 20:08
你直接编译的lua的源代码还是使用的lua的 lib或者lua的dll? 源代码的话就不需要包含,但是需要重新编译l ...


我想实现lfs的功能。lfs是可以单独编译成dll的。
博客的文章是要把lfs打包进lua53.dll这个文件里去。
我按照教程操作没有成功。

如果要想实现lfs功能,是不是只要把lfs的代码单独编译成dll,
然后直接引用吗?
回复 赞! 靠!

使用道具 举报

30

主题

211

回帖

2790

积分

用户组: 版主

UID
1821
精华
7
威望
69 点
宅币
2170 个
贡献
206 次
宅之契约
0 份
在线时间
481 小时
注册时间
2016-7-12
发表于 2020-5-17 21:29:14 | 显示全部楼层
chaw899 发表于 2020-5-17 21:12
我想实现lfs的功能。lfs是可以单独编译成dll的。
博客的文章是要把lfs打包进lua53.dll这个文件里去。
我 ...

lfs引用了 lua的一部分函数
回复 赞! 靠!

使用道具 举报

30

主题

211

回帖

2790

积分

用户组: 版主

UID
1821
精华
7
威望
69 点
宅币
2170 个
贡献
206 次
宅之契约
0 份
在线时间
481 小时
注册时间
2016-7-12
发表于 2020-5-17 21:31:34 | 显示全部楼层
直接封装成dll就需要挂着lua的 dll 或者链接lua的静态库 或者直接链接lua的obj才可以
回复 赞! 靠!

使用道具 举报

15

主题

39

回帖

246

积分

用户组: 中·技术宅

UID
5832
精华
0
威望
2 点
宅币
188 个
贡献
0 次
宅之契约
0 份
在线时间
39 小时
注册时间
2020-4-15
 楼主| 发表于 2020-5-17 21:38:18 | 显示全部楼层
Ayala 发表于 2020-5-17 21:29
lfs引用了 lua的一部分函数

为啥符号表的名字不一样呢?
_imp__lua_pushstring提示缺少这个
liblua.lib里面是这个符号lua_pushstring,
匹配不上应该如何解决?
回复 赞! 靠!

使用道具 举报

30

主题

211

回帖

2790

积分

用户组: 版主

UID
1821
精华
7
威望
69 点
宅币
2170 个
贡献
206 次
宅之契约
0 份
在线时间
481 小时
注册时间
2016-7-12
发表于 2020-5-17 22:46:28 | 显示全部楼层
chaw899 发表于 2020-5-17 21:38
为啥符号表的名字不一样呢?
_imp__lua_pushstring提示缺少这个
liblua.lib里面是这个符号lua_pushstring ...

这个名字应该是需要链接动态库版本lua.dll 对应的lib 而不是静态库版本的lib
回复 赞! 靠!

使用道具 举报

1112

主题

1652

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
245
威望
744 点
宅币
24251 个
贡献
46222 次
宅之契约
0 份
在线时间
2298 小时
注册时间
2014-1-26
发表于 2020-5-18 14:53:22 | 显示全部楼层
静态链接的时候用的是lua_pushstring这个符号,动态链接(使用dll的lib)使用的是_imp__lua_pushinteger这个符号。

使用_declspec(dllimport)修饰的函数声明,会对外导入_imp__开头的符号。
回复 赞! 靠!

使用道具 举报

30

主题

211

回帖

2790

积分

用户组: 版主

UID
1821
精华
7
威望
69 点
宅币
2170 个
贡献
206 次
宅之契约
0 份
在线时间
481 小时
注册时间
2016-7-12
发表于 2020-5-18 17:30:31 | 显示全部楼层
0xAA55 发表于 2020-5-18 14:53
静态链接的时候用的是lua_pushstring这个符号,动态链接(使用dll的lib)使用的是_imp__lua_pushinteger这 ...

发现这源码使用了比较新的c标准 ddk 7600 cl9.0 编译不了!
回复 赞! 靠!

使用道具 举报

15

主题

39

回帖

246

积分

用户组: 中·技术宅

UID
5832
精华
0
威望
2 点
宅币
188 个
贡献
0 次
宅之契约
0 份
在线时间
39 小时
注册时间
2020-4-15
 楼主| 发表于 2020-5-19 20:50:52 | 显示全部楼层
Ayala 发表于 2020-5-18 17:30
发现这源码使用了比较新的c标准 ddk 7600 cl9.0 编译不了!

用c89转c99的工具试过吗?
回复 赞! 靠!

使用道具 举报

15

主题

39

回帖

246

积分

用户组: 中·技术宅

UID
5832
精华
0
威望
2 点
宅币
188 个
贡献
0 次
宅之契约
0 份
在线时间
39 小时
注册时间
2020-4-15
 楼主| 发表于 2020-5-19 21:08:21 | 显示全部楼层
0xAA55 发表于 2020-5-18 14:53
静态链接的时候用的是lua_pushstring这个符号,动态链接(使用dll的lib)使用的是_imp__lua_pushinteger这 ...

#if defined(LUA_BUILD_AS_DLL)        /* { */

#if defined(LUA_CORE) || defined(LUA_LIB)        /* { */
#define LUA_API __declspec(dllexport)
#else                                                /* }{ */
#define LUA_API __declspec(dllimport)
#endif                                                /* } */

#else                                /* }{ */

#define LUA_API                extern

#endif                                /* } */


LUA_API的宏出现了2次,是不是我应该用extern的那个宏?
怎么解决问题?谢谢!
回复 赞! 靠!

使用道具 举报

1112

主题

1652

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
245
威望
744 点
宅币
24251 个
贡献
46222 次
宅之契约
0 份
在线时间
2298 小时
注册时间
2014-1-26
发表于 2020-5-20 00:31:41 | 显示全部楼层
chaw899 发表于 2020-5-19 21:08
#if defined(LUA_BUILD_AS_DLL)        /* { */

#if defined(LUA_CORE) || defined(LUA_LIB)        /* { */

当你编译lua的时候,用export的宏,让DLL导出符号。
当你编译使用lua的dll的时候,用import的宏,从DLL导入符号。
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-25 16:08 , Processed in 0.046435 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表