【发布时间】:2016-04-09 17:58:08
【问题描述】:
我有一个名为 A.DLL 的 动态 库,它可以正确编译和链接并生成 LIBA.A。
现在,我有另一个名为 LIBB.A 的 静态 库,它有一个使用来自 A.DLL 的 afunc() 的函数定义。这也可以正确编译和链接并生成 LIBB.A。
但是,当我在另一个程序 PROGC.C 中使用 LIBB.A 来编译为可执行程序 PROGC.EXE 时,GCC 无法使用 LIBA.A 链接到 A.DLL。
它给出了错误:undefined reference to afunc()。
我尝试了以下操作:
gcc PROGC.C -o PROGC.EXE -lLIBB.A -Wl,-Bdynamic -lLIBA.A ...
但无法成功链接。
我的问题是这是否可能?如果是,该怎么做?如果不是,为什么不是?
(提前致谢。)
【问题讨论】:
-
也许你没有使用相同的调用约定!!!
-
你是如何构建你的 libb.a 的?
-
@jdarthenay 我正在使用以下内容来构建 libb.a:
gcc.exe ... -c B.c -o B.o和ar.exe -r -s LIBB.A B.o。但是,正如@milevyo 所问,我没有在任何库中使用任何显式调用约定。这是一个问题吗?附:我正在使用相同的编译器构建所有内容。 -
您是否成功地将程序仅链接到 a.dll? (没有 libb)。
-
是的!在我的例子中,另一个类似的例子是 A.dll 是预编译的 opengl32.dll 而 libb.a 是一个静态库,它有一个使用
opengl draw functions的单个函数定义,并且仅当我使用 libb.a 中的特定函数时,我才遇到相同的链接错误。但我总是能够动态链接 opengl32.
标签: c gcc linker static-linking dynamic-linking