技术宅的结界

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

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 159|回复: 15
收起左侧

符号表遇到的问题

[复制链接]

15

主题

53

帖子

233

积分

用户组: 中·技术宅

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

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

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

x
本帖最后由 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'
回复

使用道具 举报

28

主题

185

帖子

2098

积分

用户组: 版主

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

15

主题

53

帖子

233

积分

用户组: 中·技术宅

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

可以用makefile,编译环境mingw

28

主题

185

帖子

2098

积分

用户组: 版主

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

15

主题

53

帖子

233

积分

用户组: 中·技术宅

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

谢谢提醒,我再试试看。

28

主题

185

帖子

2098

积分

用户组: 版主

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

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

15

主题

53

帖子

233

积分

用户组: 中·技术宅

UID
5832
精华
0
威望
2 点
宅币
176 个
贡献
0 次
宅之契约
0 份
在线时间
36 小时
注册时间
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,
然后直接引用吗?

28

主题

185

帖子

2098

积分

用户组: 版主

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

lfs引用了 lua的一部分函数

28

主题

185

帖子

2098

积分

用户组: 版主

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

15

主题

53

帖子

233

积分

用户组: 中·技术宅

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

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

28

主题

185

帖子

2098

积分

用户组: 版主

UID
1821
精华
6
威望
67 点
宅币
1630 个
贡献
119 次
宅之契约
0 份
在线时间
348 小时
注册时间
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

1061

主题

2452

帖子

6万

积分

用户组: 管理员

一只技术宅

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

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

28

主题

185

帖子

2098

积分

用户组: 版主

UID
1821
精华
6
威望
67 点
宅币
1630 个
贡献
119 次
宅之契约
0 份
在线时间
348 小时
注册时间
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

主题

53

帖子

233

积分

用户组: 中·技术宅

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

用c89转c99的工具试过吗?

15

主题

53

帖子

233

积分

用户组: 中·技术宅

UID
5832
精华
0
威望
2 点
宅币
176 个
贡献
0 次
宅之契约
0 份
在线时间
36 小时
注册时间
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的那个宏?
怎么解决问题?谢谢!

1061

主题

2452

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
221
威望
348 点
宅币
19567 个
贡献
40516 次
宅之契约
0 份
在线时间
1851 小时
注册时间
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, 2020-8-3 18:01 , Processed in 0.113004 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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