【问题标题】:Linking libraries in Windows在 Windows 中链接库
【发布时间】:2012-10-18 03:56:09
【问题描述】:

我很难找到有关如何在 Windows 中简单地链接库的信息。

Linux 似乎有这些可爱的 gcc 选项(来自 here

gcc MadgwickAHRS.c -o MadgwickAHRS

而我必须在 Windows 中使用类似的东西(来自here):

gcc -c -DBUILDING_EXAMPLE_DLL  MadgwickAHRS.c
gcc -shared -o MadgwickAHRS.dll MadgwickAHRS.o -l,--out-implib,MadgwickAHRS.a

第一个给我这个错误:

c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../libmingw32.a(main.o):main.c:(.text+0xd2 ): 对 `WinMain@16' 的未定义引用

第二个,这个错误:

gcc.exe: MadgwickAHRS.a: 没有这样的文件或目录

(我不知道我应该如何根据给出的说明制作一个.a 文件)。我从来没有能够正确链接库,我一直在使用#include "file.c"(有一个#include "file.h")而不是#include "file.h",只是因为它有效。但我想学习“正确”的方法,看看我的 Cython 代码是如何覆盖我的 .c 代码的……我想是时候尝试其他方法了。

如果你想帮助我解决我的 Cython/numpy 问题/告诉我它永远不会起作用,我也会附上它。我的代码还没有很好地注释/编写,所以就是这样......但它应该显示我正在尝试使用我的新链接库/共享对象的东西的最基本想法。

我似乎无法找到粘贴代码的好方法,所以我只从 pastebin 中包含它。这主要是 Madgwick 的作品取自他的网站(链接是代码)。

这里是 pastebin 的“链接”:

MadgwickAHRS.c

MadgwickAHRS.h

MadgwickAHRS.pyx

MadgwickAHRS.pxd

setup.py

GCC 版本 4.5.2

Windows 7

Python 2.6

编辑:

我试过了

gcc -shared MadgwickAHRS.c -o MadgwickAHRS.o

得到了我的 MadgwickAHRS.o,写了一个快速的 main.c

#include "MadgwickAHRS.h"
int main (void) {
    MadgwickAHRSupdate(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0);
    MadgwickAHRSupdateIMU(0.0,0.0,0.0,0.0,0.0,0.0);
    return 0;
}

然后运行这个

gcc -c main.c  -o main.o

然后将它们链接起来

gcc main.o MadgwickAHRS.o -lm -o main

得到我的 exe 并运行它没有错误。在继续之前还有什么我应该知道的吗?感谢您的答复。 :)

编辑: 多亏了您的 cmets,我最终获得了工作链接。 我用过

gcc -shared MadgwickAHRS.c -o MadgwickAHRS.o

【问题讨论】:

  • 尝试不使用-c 但使用-shared 的第一个命令。 Anyld 可能会指定输出文件。
  • 另外,尝试在一行中编写构建命令,看看它是否首先有效,然后将其分解为多个步骤。顺便说一句,这是哪个版本的 MinGW?

标签: python c gcc dll cython


【解决方案1】:

我认为您应该指定您正在构建控制台应用程序。看来您编译为窗口应用程序。尝试找出如何更改项目的类型。 WinMain - 是 Windows 应用程序的入口函数。 可能这个标志会帮助你--subsystem,console

【讨论】:

  • 我其实只是想把c函数包装成python。
【解决方案2】:

谢谢 Niklas R

gcc -shared MadgwickAHRS.c -o MadgwickAHRS.o

创建我需要的 .o 文件

【讨论】:

    猜你喜欢
    • 2020-08-21
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多