在Windows中链接库

时间:2012-10-18 03:56:10

标签: python c gcc dll cython

我很难找到有关如何在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中:(文本+ 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并运行它没有错误。在继续之前还有什么我应该知道的吗?感谢您的答复。 :)

编辑: 由于你的意见,我最终得到了工作链接。 我用了

gcc -shared MadgwickAHRS.c -o MadgwickAHRS.o

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

谢谢Niklas R

gcc -shared MadgwickAHRS.c -o MadgwickAHRS.o

创建我需要的.o文件