This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Creating dll in cygwin gives "Undefined reference" errors


On 7/28/07, Brian Dessent <brian@dessent.net> wrote:
> Pradip Jadav wrote:
>
> > But when I compiles in cygwin it gives me some "Undefined reference" errors.
> > Take an example,
> >
> >  /cygdrive/e/DOCUME~1/LOCALS~1/Temp/ccLMFYUe.o:sample.c:(.text+0x4c):
> > undefined reference to `createlog(int, char*, ...)'
> >
> > Now this "createlog" function is defined in one of .cpp file of my
> > main program.(Just for your information)
> >
> > Can you help me to solve problem of "undefined reference" ??
>
> The undefined reference is because fundamentally ELF (Linux) and PE/COFF
> (Windows) are very different in terms of how linking works under the
> hood.  The short explanation is that PE/COFF requires all references to
> be resolved at link-time, thus you have to explicitly tell the linker
> where createlog() is to be found.
>
> But I've typed this explanation so many times, I think I'll just start
> linking to past copies of it:
>
> http://www.cygwin.com/ml/cygwin/2005-07/msg00675.html
> http://www.cygwin.com/ml/cygwin/2006-12/msg00592.html
> http://www.cygwin.com/ml/cygwin/2007-06/msg00450.html
>
> Brian
>
> --
> Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
> Problem reports:       http://cygwin.com/problems.html
> Documentation:         http://cygwin.com/docs.html
> FAQ:                   http://cygwin.com/faq/
>
>

Hi Brian,

First of all thanx for your reply.
Secondly, sorry for not going through all previous helps.

BTW, following link helped me a lot.
http://www.cygwin.com/ml/cygwin/2006-12/msg00592.html

YEAH, Now I am able to create .dll file and also succeeded in
attaching it to the main executable.

Steps are ...

###create main.c and do dllexport for a function. For example,
In main.c ==>
__declspec(dllexport) int func1()

###create object file.
g++ -c main.c

###create main.exe file.
g++ -o main.exe main.o -ldl

###create .def file
dlltool.exe --export-all-symbols --output-def main.def main.o

###create main library file.
dlltool.exe --dllname main.exe --def main.def --output-lib libmain.dll.a

###create DLL.
g++ -shared -o theDLL.dll theDLL.c -L. -lmain

Thats it ...!! :)

But scene is not this much only.. This was the scene with a single function.
What if we want to export more than one function from main program?
What if we want to use a class which is declared in main program(Using
this class I Want to create a derived class in dll

code)?
Do I need to specify "__declspec(dllexport)" for all?
Is there any other way? Its because my program is quite big. So
managing code will be very tough na?

Waiting for reply.


-- 
Regards,
Pradip K. Jadav
(Mob.)+91-9323315353

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]