12-19-2014 02:46 PM
I have a system that runs rack mount test instruments. I have a system DLL that performs different generic functions for me and also included custom driver functions for the instrumentation. This DLL is built and the different driver .h/.fp files and the system DLL library file are distributed. The distributed files are included in various test projects.
This approach has worked for the last 2 years using CVI2009. I recently started trying to use CVI2013 SP1. The system DLL still builds with no errors. However, my various test DLL that use the distributed files, now compile fine, but have Undefined symbol link errors. The link errors point to functions and structures that are global to the system DLL, but weren't meant for exported use by the test DLLs. The files the link errors call out are .obj files for a couple of different system drivers that are located in the build folder that CVI created. Anyone experienced anything like this while upgrading to CVI2013?
12-22-2014 12:08 PM
Hello HeadTrauma,
I think it might be worth checking that you have your library set to a dynamically linked library. The behavior you are receiving seems akin to changing a dynamically linked library to a statically linked library. This could happen automatically in an upgrade. For information on how to set this, please view the following link:
http://digital.ni.com/public.nsf/allkb/BF8084DB74021EE986257AB200001737
Best wishes!
12-16-2015 04:53 PM
I'm having these same symptoms.
Recently upgraded from 2014 to 2015. My DLL project was compiling fine prior to upgrade. Now when I build it, the test program that uses the built DLL reports
error: '_gPOPUPS' was specified as an export, but is not defined. error: Undefined symbol '_gPOPUPS' referenced in "c:\Test Projects\LabWindows\cvibuild.test\Debug\test.obj".
The linked article above doesn't work for me. I also double-checked that my DLL header is exporting all symbols. Strange.
12-18-2015 03:56 PM
Never mind, I resolved this. I'm not clear why the calling convention needed to change in 2015, but here is how I resolved:
DLL project
dll_c_file.h
DLLEXPORT int gPOPUPS; // set this variable to 1 to get popup messages
test project
gPOPUPS = 1;
My issue was that I had an extern on my DLLEXPORT declaration. I have found that in my test project, I don't even need to declare this global with a DLLIMPORT.
01-14-2016 08:58 AM
Actually, my previous post isn't quite right. See here...