用于命名/定位多个目标库的Cygwin约定

时间:2017-02-02 15:57:30

标签: dll cygwin shared-libraries libraries naming

我正在维护一个也可以为Cygwin编译的多平台项目。我想为4种不同的" cygwin-ish"提供库和二进制文件。目标

  • 32位cygwin
  • 32位mingw
  • 64位cygwin
  • 64位mingw

提供所有这四种语言的Cygwin约定是什么?

这有两个部分,二进制,让我们称之为" runner"和库("库"),这是一个可动态加载的共享库,一个DLL。

用户将使用交叉编译器或本机编译器为其中一个目标构建.dll。 (S)他将使用跑步者,其中包括加载用户提供的DLL和库。显然,这三者的目标都需要匹配。

二进制文件通常从/usr/bin/usr/local/bin运行,在DLL平台上,动态库将从同一位置或路径中的目录加载。由于用户还将DLL与库链接,因此需要liblibrary.dll.a,通常存储在/usr/lib/usr/local/lib

我可以看到两种主要策略

  1. 提供具有不同名称但位于相同位置的库和二进制文件,
  2. 提供具有相同名称但位于不同位置的库和二进制文件。
  3. 策略1会导致/usr/bin/runner-32-cygwin等,而库和DLL将会出现类似的命名。复杂性包括用户需要理解命名,运行"非自然"命名二进制文件和不同的.dll.a:s需要引用/指向不同的DLL:s。

    策略2会导致链接和运行时路径的复杂性,包括/usr/bin-32-cygwin等路径或其他路径。

    有处理这个问题的惯例或传统智慧吗?我也很欣赏有关此事的任何其他想法和/或想法,或对我的假设进行更正。

1 个答案:

答案 0 :(得分:0)

策略#2

无论如何,

32位和64位分开

请参阅 http://journal.frontiersin.org/article/10.3389/fnins.2016.00394/full

2013-11-26 22:42           0 usr/i686-w64-mingw32/sys-root/mingw/bin/
2013-11-26 22:42       66560 usr/i686-w64-mingw32/sys-root/mingw/bin/libbz2-1.dll
2013-11-26 22:42           0 usr/i686-w64-mingw32/sys-root/mingw/include/
2013-11-26 22:42        6231 usr/i686-w64-mingw32/sys-root/mingw/include/bzlib.h
2013-11-26 22:42           0 usr/i686-w64-mingw32/sys-root/mingw/lib/
2013-11-26 22:42       63176 usr/i686-w64-mingw32/sys-root/mingw/lib/libbz2.a
2013-11-26 22:42       23040 usr/i686-w64-mingw32/sys-root/mingw/lib/libbz2.dll.a

https://cygwin.com/packages/x86_64/mingw64-i686-bzip2/mingw64-i686-bzip2-1.0.6-4

2013-03-07 02:54           0 usr/include/
2013-03-07 02:54        6245 usr/include/bzlib.h
2013-03-07 02:54           0 usr/lib/
2013-03-07 02:54      271704 usr/lib/libbz2.a
2013-03-07 02:54       22586 usr/lib/libbz2.dll.a

https://cygwin.com/packages/x86_64/libbz2-devel/libbz2-devel-1.0.6-2

2013-03-07 02:54       65043 usr/bin/cygbz2-1.dll