编译和链接DLL时出错

时间:2014-10-10 09:29:34

标签: c gcc dll compilation

我正在尝试在cygwin tutorial之后编译一个简单的dll。除了最后一步,我已经成功完成了所有工作。当我执行命令时:

gcc -o myprog myprog.c -L./ -lmydll

我收到一条错误消息,指出hello()未在该范围内声明。我按照教程逐字逐句,但我仍然无法编译简单的项目,因为原因丢失了。

各个文件的代码如下:

(myprog.c中)

int main(void){
    hello();
}

(mydll.c)

#include <stdio.h>
int hello(){
    printf("Hello World!\n");
    return 0;
}

3 个答案:

答案 0 :(得分:1)

这个例子在我的Cygwin中正常运行

armathew@3NJ2VQ1 /cygdrive/d/userdata/armathew/Desktop/WWWW
$ ls
mydll.c  myprog.c

armathew@3NJ2VQ1 /cygdrive/d/userdata/armathew/Desktop/WWWW
$ gcc -c mydll.c

armathew@3NJ2VQ1 /cygdrive/d/userdata/armathew/Desktop/WWWW
$ gcc -shared -o mydll.dll mydll.o

armathew@3NJ2VQ1 /cygdrive/d/userdata/armathew/Desktop/WWWW
$ gcc -o myprog myprog.c -L./ -lmydll

armathew@3NJ2VQ1 /cygdrive/d/userdata/armathew/Desktop/WWWW
$ ./myprog.exe
Hello World!

您使用的Cygwin版本是什么?我的是1.7.5

armathew@3NJ2VQ1 /cygdrive/d/userdata/armathew/Desktop/WWWW
$ uname -r
1.7.5(0.225/5/3)

答案 1 :(得分:0)

好吧,链接库的声明可能不正确。 它应该是

  

-L<library path> -lyoulibrarymane

因为库路径后没有“./”。 这是我使用的一个例子,它可能会有所帮助。 -I/usr/local/include是头文件路径

  

gcc -o hello-world helloopencv.c -I / usr / local / include -L / usr / local / lib -lopencv_highgui -lopencv_core -lopencv_imgproc

答案 2 :(得分:0)

您需要在myprog.c的顶部添加声明:

int hello(void);

或者你可以将它放在一个新的mydll.h中,并将#include放在myprog.c中。