views:

192

answers:

2

Hi, I am planning to use libcurl in my project. I had downloaded the library source,built and integrated it in a small POC application. I am able to build and run the application without any issues with the generated libcurl.dll and libcurl_imp.lib files. Now when I integrate the same library in my project I am getting linker errors.

6>foo.obj : error LNK2001: unresolved external symbol _imp_curl_easy_setopt

6>foo.obj : error LNK2001: unresolved external symbol _imp_curl_easy_perform

6>foo.obj : error LNK2001: unresolved external symbol _imp_curl_easy_cleanup

6>foo.obj : error LNK2001: unresolved external symbol _imp_curl_global_init

6>foo.obj : error LNK2001: unresolved external symbol _imp_curl_easy_init

I have researched and tried all manners of workarounds like adding CURL_STATICLIB definitions , additional libraries , changing to /MT even copying the libs to the release directory but nothing seems to work. As far as I can see the only difference between approach #1 and #2 in my steps are #1 is an console application using the libcurl.dll while in my main project this is another dll which is trying to link to libcurl.dll.. Would that necessitate any change in approach? Can I use the same generated multi threaded DLL /MD file for both(Tried /MT also with no success)? Any other ideas?

Following are the linker options.

-------------------------------------------------Working-------------------------------------------------

/OUT:"C:\SampleFTP\Release\SampleFTP.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\SampleFTP\SampleFTP\Release" /MANIFEST /MANIFESTFILE:"Release\SampleFTP.exe.intermediate.manifest" /DEBUG /PDB:"c:\SampleFTP\release\SampleFTP.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /MACHINE:X86 /ERRORREPORT:PROMPT libcurl_imp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

-------------------------------------------------Working-------------------------------------------------

----------------------------------------------NotWorking-------------------------------------------------

/OUT:".......\nt\Win32\Release/foo__tests.dll" /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\FullLibPath\libcurl_libs" /LIBPATH:"......\nt\Win32\Release" /DLL /MANIFEST /MANIFESTFILE:".\foo_tests\Win32\Release\foo_tests.dll.intermediate.manifest" /DEBUG /PDB:".......\nt\Win32\Release/foo_tests.pdb" /OPT:REF /OPT:ICF /LTCG /IMPLIB:".......\nt\Win32\Release/foo_tests.lib" /MACHINE:X86 /ERRORREPORT:PROMPT odbc32.lib odbccp32.lib util_process.lib wsock32.lib Version.lib libcurl_imp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "......\nt\win32\release\otherlib1.lib" "......\nt\win32\release\otherlib2.lib"

----------------------------------------------NotWorking-------------------------------------------------

+1  A: 

did you run the commands

curl-config --cflags
curl-config --libs

With the results from --libs i could find how to link my application.

VP
Thanks..The issue is resolved. But this is a good tip for future issues.
+1  A: 

Ok...This embrassing....I had managed to resolve the issue and as you might guess it has nothing to do with libcurl..Basically the file which is linking to libcurl is part of multiple projects. So while I have defined the libs correctly in the first project, I have not in the others..And the build log shows the projects(success/failure messages) one after another and I could notice the problem only while going through togeather with my senior...All in all a humbling experience..

Lesson learnt(for future visitors here) would be - Libcurl is a mature product and is unlikely to crib for basic bundling - Only thing necessary if you are going to use windows .dll would be 1) Download source. Open soln file. Build(as release dll). 2) Include additional header path for curl libraries. 3) Include .lib file as a dependency while linking. 4) Start making curl calls (including ther curl headers in source)

and you should be good to go. For starting off(other than the excellent repository at the home page) I have fount a good tutorial here...

http://www.luckyspin.org/?p=28

this tutorial is good source of information!
VP