MichaelMitchell
MichaelMitchell

Reputation: 1167

Error while compiling and linking dll

I am trying to compile a simple dll following the cygwin tutorial. I have been able to successfully do all but the last step. When I execute the command:

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

I get an error saying that hello() is not declared in that scope. I followed the tutorial verbatim, yet I am still not able to compile the simple project and am lost as to why.

The code for the individual files are as follows:

(myprog.c)

int main(void){
    hello();
}

(mydll.c)

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

Upvotes: 0

Views: 60

Answers (3)

Arjun Mathew Dan
Arjun Mathew Dan

Reputation: 5318

The example is working fine for me in my 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!

What is the Cygwin version you are using? Mine is 1.7.5

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

Upvotes: 1

John Zwinck
John Zwinck

Reputation: 249642

You need to add a declaration at the top of myprog.c:

int hello(void);

Or you could put this in a new mydll.h and #include that in myprog.c.

Upvotes: 0

YU Wu
YU Wu

Reputation: 11

well, the statement for linking library may be incorrect. It should be

-L<library path> -lyoulibrarymane

as there is no "./" after the library path. here is an example that I used, it may be helpful. the -I/usr/local/include is the header file path

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

Upvotes: 0

Related Questions