Sysprogs forums › Forums › VisualGDB › Debugging shared library
Tagged: shared library
- This topic has 12 replies, 2 voices, and was last updated 8 years, 1 month ago by support.
-
AuthorPosts
-
September 23, 2016 at 23:25 #9120sidpriceParticipant
I am using VisualGDB to build an application and a shared library from VS2015. The build server is a Linux computer and the target device is an ARM board. Before adding the shared library I was able to build the application on the build server and debug it on my target hardware, all worked very well.
Now, I need to move some of the code from my application to begin developing a shared library. I added a new VisualGDB project and configured it to build in the same way.
I added a reference to my application for the library project but when I try to rebuild the solution I get an error from g++ saying “TSN_NIC.so: file not recognized: File format not recognized”.
I guess the error is because it is trying to statically link to the library. (.so)
My question is how can I setup the build so that I can build this solution and then debug the class library using the application
Thanks,
Sid
September 25, 2016 at 18:26 #9123supportKeymasterHi,
Our best guess is that the library is built using a different compiler (e.g. using native g++ instead of a cross-compiler for your ARM board). You can check that by running “readelf -h <file>” for the main application and the .so file. If the “Machine” field is mismatching, please double-check the compiler you are using.
September 26, 2016 at 18:52 #9129sidpriceParticipantThank you, that was the issue. A simple newbie mistake, I had not configured my remote cross compiler correctly. Now my small test works great and I have debugger access to the shared library.
Love this product!
Sid
September 26, 2016 at 21:51 #9131sidpriceParticipantI have one more issue with my shared library project, it appears that CLang Intellisense is not working correctly. My code compiles and runs fine but CLang Intellisense reports errors on things in the std namespace. For example:
std::ifstream inputFile;
inputFile.open(“theFile”) ;
There is a red mark under the dot between inputFile and open and the tooltip says “std::fstream (aka int) is not a structure or union”
I have checked the Intellisense directories in my library project and they look the same the main application which does not have this problem.
Is there something special I need to add for a library?
Sid
September 27, 2016 at 20:10 #9138supportKeymasterHi,
First of all, please try VisualGDB 5.2 Beta 1. We have resolved a lot of IntelliSense-related issues there. If the problem occurs there as well, please check if it reports any missing header files and use the automatic header discovery feature to locate them.
September 27, 2016 at 22:25 #9142sidpriceParticipantI have downloaded and installed 5.2 Beta 1 and I have the same problem. However now CLang reports that it cannot find file “gnu\stubs-soft.h”. I have no idea what this header is for. Would that prevent the correct intellisense for such things as “fstream” and “string”?
Severity Code Description Project File Line Suppression State
Error [Clang IntelliSense] Error: member reference base type ‘std::ifstream’ (aka ‘int’) is not a structure or union TSN_NIC c:\dataroot\projects\tsn\tsn_nic\TSN_NIC.cpp 28
Error [Clang IntelliSense] Error: member reference base type ‘std::ifstream’ (aka ‘int’) is not a structure or union TSN_NIC c:\dataroot\projects\tsn\tsn_nic\TSN_NIC.cpp 33
Error [Clang IntelliSense] Error: member reference base type ‘std::ifstream’ (aka ‘int’) is not a structure or union TSN_NIC c:\dataroot\projects\tsn\tsn_nic\TSN_NIC.cpp 35
Error [Clang IntelliSense] Error: member reference base type ‘string’ (aka ‘int’) is not a structure or union TSN_NIC c:\dataroot\projects\tsn\tsn_nic\TSN_NIC.cpp 38
Error [Clang IntelliSense] Error: ‘string’ (aka ‘int’) is not a class, namespace, or enumeration TSN_NIC c:\dataroot\projects\tsn\tsn_nic\TSN_NIC.cpp 38Plus, there is a new warning for a simple stream operation “inputFile >> inputLine”, it says:
Severity Code Description Project File Line Suppression State
Warning [Clang IntelliSense] Warning: expression result unused TSN_NIC c:\dataroot\projects\tsn\tsn_nic\TSN_NIC.cpp 37Sid
September 28, 2016 at 03:55 #9146supportKeymasterHi,
Yes, the missing file can easily declare some functions or types related to the ifstream and break IntelliSense for it. Please try clicking at the error to see which file includes the file.
Perhaps your compiler inserts some implicit preprocessor macro that VisualGDB does not catch, i.e.:
#ifdef SOMEMACRO #include <somefile.h> #else #include <gnu/stubs.h> #endif
So the compiler includes <somefile.h> and succeeds, but IntelliSense tries to include gnu/stubs.h and fails. Searching your target include directories for stubs.h and checking the code around the relevant #include<> statement should help clarify this.
- This reply was modified 8 years, 1 month ago by support.
September 28, 2016 at 18:28 #9149sidpriceParticipantI do not think the “stubs-soft.h” is the issue, that file is missing from my system, however “stubs-hard.h” is there and it does not include other fiels nor does it have anything to do with fstream, string, or any of the other errors. CLang reports that “string” is not a class!
Don’t forget that the main application in the solution has the same intellisense directories and works just fine.
Sid
September 29, 2016 at 00:04 #9151supportKeymasterSorry about that, it may be a bug of the Clang IntelliSense. If it reports that ‘string’ is not a class, please try including <string> explicitly and checking if it still complains about it. If yes, please copy the definition of the ‘string’ class from the <string> file to the source file and check if it ignores it again or complains about another missing class.
Alternatively if you could reproduce it on a small separate example (it should include your toolchain’s include directories) and send it to us, we could investigate it on our side.
September 29, 2016 at 21:30 #9164sidpriceParticipantI tried to implicitly include “string”:
#include <string>
This made no difference, so I copied the definition of ‘string’ from ‘stringfwd.h’:
typedef basic_string<char> string;
This stopped Clang saying ‘string’ is not a class but there is no intellisense for the members of the string class, I assume because ‘basic_string’ remains unknown to Clang.
What is odd here is that the same Intellisense settings in the main application work, it is only in the class library project that CLang fails, maybe that is a clue!
I can send you this small library project, however the target OS is Yocto, so I am not sure fi it would help you.
Sid
October 1, 2016 at 19:34 #9177supportKeymasterHi,
Sending a repro project should be the easiest. Are you using a Windows cross-toolchain or compiling on the Linux side?
In case of a cross-toolchain we will also need the toolchain archive; in case of Linux compilation we will need a snapshot of %LOCALAPPDATA%\RemoteSourceCache\<machine> in order to reproduce this.
October 3, 2016 at 23:32 #9189sidpriceParticipantShould I send this data to support @ sysprogs.com ??
Sid
October 4, 2016 at 04:50 #9193supportKeymasterHi,
Yes, that should do. Please upload the files to a file hosting service like dropbox, as our ticket system has an attachment size limit.
-
AuthorPosts
- You must be logged in to reply to this topic.