> Alex wrote: >> I compiled nss on FreeBSD platform, and wrote a program . >> My program use function SECU_ReadDERFromFile, like this >> >> #include "secutil.h" >> ...... >> rv = SECU_ReadDERFromFile(&certDER, inFile, PR_TRUE); >> ...... >> >> >> This function is in libsectool.a >> >> #nm libsectool.a |grep SECU_Read >> 00001290 T SECU_ReadDERFromFile >> >> when I compile my program, it can generate .o file. but can't make >> executable file. error message like this: >> >> g++ -o certools ./certool/GetDNToDB.o >> ./certool/pk12util.o -L. -L./lib -Wl,-rpath-link,./lib -lsectool -lssl3 >> -lsmime3 >> -lnss3 -lplc4 -lplds4 -lnspr4 -lpthread -lc -fpic >> ./lib/libsoftokn3.so: warning: warning: mktemp() possibly used unsafely; >> consider using mkstemp() >> ./certool/GetDNToDB.o(.text+0xc9e): In function `GetCertFullDN(char*)': >> : undefined reference to `SECU_ReadDERFromFile(SECItemStr*, PRFileDesc*, >> int)' >> gmake: *** [certool] Error 1 >> >> I try other functions in libsectool.a which is defined in secutil.h. it >> also can't been use. I feel so despondent. >> >> Why?? I have already include header file(secutil.h). Anyone can give me >> some suggestions? Please help me. > > Your link command line looks correct. We link our > command-line utilities with ./lib/libsectool.a instead > of -L./lib -lsectool, but -L./lib -lsectool should work. > > Since you use g++ to link, I suspect that you also GetDNToDB.o > is compiled from a C++ file. Try include secutil.h in an extern "C" > block like this: > > extern "C" { > #include "secutil.h" > } > > Note that libsectool.a is for NSS internal use. So > you are using it at your own risk. > > Wan-Teh
Thanks for your help. The problem has been solved by adding extern "C" block. I'm very grateful. :-) _______________________________________________ dev-tech-crypto mailing list dev-tech-crypto@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-tech-crypto