Fortran Coder

查看: 1687|回复: 13
打印 上一主题 下一主题

[讨论] 两个静态库重复定义造成冲突如何解决?

[复制链接]

128

帖子

36

主题

1

精华

大师

F 币
1158 元
贡献
594 点
跳转到指定楼层
楼主
发表于 2023-9-22 18:21:22 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
编译器:SimplyFortran 3.31
Dislin库文件dismg_d.a与SimplyFortran自带界面库文件libappgraphics.a中均有line子程序,重复定义造成冲突
报错信息:
d:/program files (x86)/simply fortran 3/mingw-w64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib\libappgraphics.a(drawing.o):drawing.c:(.text+0x13e0): multiple definition of `line'
c:\dislin\dismg_d.a(line.o):line.c:(.text+0x476e): first defined here
collect2.exe: error: ld returned 1 exit status


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

14#
发表于 2023-9-28 12:22:21 | 只看该作者
CALL SYSTEM("Dislin库画图")是否可行?

128

帖子

36

主题

1

精华

大师

F 币
1158 元
贡献
594 点
13#
 楼主| 发表于 2023-9-28 11:09:45 | 只看该作者
chiangtp 发表于 2023-9-28 10:05
1. 你 "自己的source", 所有的 LINE calls 均已做替換[ (STRTPT, CONNPT) , (moveto, lineto)] , link時就 ...

Appgraphics库做界面,Dislin库画图
我尝试一下Dislin既做界面又画图,可能会有点麻烦

128

帖子

36

主题

1

精华

大师

F 币
1158 元
贡献
594 点
12#
 楼主| 发表于 2023-9-28 11:03:31 | 只看该作者
这是原话

C2D7A1E8-1576-454E-A542-5ED74FA5A0C7.png (370.59 KB, 下载次数: 121)

C2D7A1E8-1576-454E-A542-5ED74FA5A0C7.png
回复

使用道具 举报

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

11#
发表于 2023-9-28 10:05:09 | 只看该作者
1. 你 "自己的source", 所有的 LINE calls 均已做替換[ (STRTPT, CONNPT) , (moveto, lineto)] , link時就不會   
    有 multiple definition of "LINE"的問題
2.  低階[ (STRTPT, CONNPT) , (moveto, lineto)] 是不會再referenc 高階[LINE] 的
3.  有 不是"自己的source", i.e., 第三方OBJ? 參與 link?
4. LINE不是唯一的問題?
4. 請你描述一下, 為何一個 PROGRAM/SUBRRIGRAM/PLOT 用到兩個不兼容ˊ的graphics linraries
5. 兩座大山難移, 登山之路前有古人後有來者

128

帖子

36

主题

1

精华

大师

F 币
1158 元
贡献
594 点
10#
 楼主| 发表于 2023-9-28 09:21:02 | 只看该作者
这是SF作者的答复:错误是由链接器而非编译器产生的。链接器遇到两个不同的行过程并失败。即使您没有显式地使用line,由于库中的一些较低级别调用,它仍然很有可能需要链接。

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

9#
发表于 2023-9-25 11:01:14 | 只看该作者
1. "LINE" 在DISLIN中為"EXTERNAL" subroutine,  在AppGraphics中應該也是
2. 如果都是"MODULE" subroutines, li913的作法OK
3. 如果 錯誤訊息 仍是 multiple definition of `line', 請確認:你的程式中 所有的 "LINE"calls 均已做替換
    DISLIN: (LINE) -> (STRTPT, CONNPT)      
    AppGraphics: (line) -> (moveto, lineto)

128

帖子

36

主题

1

精华

大师

F 币
1158 元
贡献
594 点
8#
 楼主| 发表于 2023-9-25 10:44:54 | 只看该作者
chiangtp 发表于 2023-9-25 10:13
請告知 "錯誤訊息"

还是相同的错误信息,网上说只有对静态库进行重新改名封装了

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

7#
发表于 2023-9-25 10:13:35 | 只看该作者
weixing1531 发表于 2023-9-25 10:03
用相同功能函数代替还是不行

請告知 "錯誤訊息"

128

帖子

36

主题

1

精华

大师

F 币
1158 元
贡献
594 点
6#
 楼主| 发表于 2023-9-25 10:03:12 | 只看该作者
chiangtp 发表于 2023-9-23 20:17
DISLIN: (LINE) -> (STRTPT, STRTPT)
or
SimplyFortran, AppGraphics: (line) -> (moveto, lineto)

用相同功能函数代替还是不行
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-13 03:56

Powered by Tencent X3.4

© 2013-2024 Tencent

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