From: JonY <10...@gm...> - 2009-09-07 12:11:45
|
On 9/7/2009 15:43, Daniele Barzotti wrote: > JonY wrote: >> >> Hi, >> >> examining the header closer, it looks like the symbols your test project >> is correct, the symbol names in the static lib might be wrong. >> >> Can you run "nm" on libAudioLib4.a and pass it through c++filt? >> >> example: "nm libAudioLib4.a | c++filt" on the command prompt >> >> Sorry, I'm not very fluent in C++, the namespace prefix is probably >> missing from the symbol name in the static archive. > > I think you've got it! In fact the namespace is missing!! > > .... > 00000309 t global constructors keyed to _Z17CreateAudioPlayerv > U __Unwind_Resume > 00000163 T RetValToStr(EuroAudioLib::EAudioLibRetVal, > std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) > 000000c8 T GetDeviceInfo(unsigned int, RtAudio::DeviceInfo*) > 0000008e T GetDeviceCount() > 00000000 T CreateAudioPlayer() > 00000047 T CreateAudioRecorder() > 00000190 t __static_initialization_and_destruction_0(int, int) > .... > > Instead looking into the TEST project the Namespace is present. > Now the question is: why this happen? > > > Hi, I think another EXTERN_C define leaked in from elsewhere, not from your interface header. If your header did cause the extern "C", the symbols would also be decorated with WINAPI suffixes. Perhaps WINAPI got removed instead. Sorry, this looks impossible to me, given the set of preprocessor checks used to guard the EXTERN_C define. Maybe you can send a preprocessed copy of the code, or a small test case if you can reproduce it. |