thedude112286
asked on
strdup question
What header file is strdup located in and do I need to link to any libs in my project to use it? I am trying to compile someone else's C code that uses the function and I get this error:
Link error:
Undefined symbol: _strdup
This code compiled and linked as a dll before I exported any functions. After I added __declspec(dllexport) to some of the functions, I started to get this error. How can I fix this?
Link error:
Undefined symbol: _strdup
This code compiled and linked as a dll before I exported any functions. After I added __declspec(dllexport) to some of the functions, I started to get this error. How can I fix this?
#include <string.h>
ASKER
To get the code to compile, I had to change calls to strdup into calls to _strdup. Now it works fine. Why did this happen?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
try write a function...
#include <string.h>
/*................*/
char* strdup ( const char *str_in )
{
int len = strlen( str_in ) + 1;
char *str_cpy = malloc (len);
if (str_dup == NULL) return NULL;
return ((char *) memcpy (str_dup, str_in, len) );
}
#include <string.h>
/*................*/
char* strdup ( const char *str_in )
{
int len = strlen( str_in ) + 1;
char *str_cpy = malloc (len);
if (str_dup == NULL) return NULL;
return ((char *) memcpy (str_dup, str_in, len) );
}
Hi Brett,
That's a good post about the Micro$oft ANSI compliance. I didn't realize that strdup() isn't ANSI and that Micro$oft treated it this way.
Thanks for the tip!
Kent
That's a good post about the Micro$oft ANSI compliance. I didn't realize that strdup() isn't ANSI and that Micro$oft treated it this way.
Thanks for the tip!
Kent
hey .. "strdup into calls to _strdup."
whats the difference ?
whats the difference ?
The compiler prepends an underscore ('_') onto function names (actually, any external, I believe) prior to inserting the name into the object file.
When you compile strdup(), the compiler places _strdup into the object file. The linker then "sees" the name _strdup and links it.
As I recall, this the compiler's way of "separating" local variables from externals. The names of the "local" variables remain intact and the externals have the underscore prepended.
Kent
thanks Kent