我正在尝试在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;
}
答案 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中。