Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does a vendor supplied C++ library support multiple compilers?

Tags:

c++

linker

I make use of a vendor supplied library in a C++ program. All the vendor supplies is a .lib, .dll and the header files.

This library was first used in MSVC++ 6 and now in MSVC 2010.

It appears they support mingw, qt, etc. I have had no problems with using it in either debug or release mode.

I have recently added another dependency to the project, yaml-cpp, an open-source project that provides no binaries. I am able to build yaml-cpp using cmake and MSVC 2010 as a static library and can link it to my project successfully.

In order to do this I must link to the debug and release versions of the .lib respectively as I have run in to weird Microsoft CRT/linker issues I am just learning about.

I am curious, how does the vendor of my first library (libXl if you are curious) provide a .lib and .dll that works on a range of compilers without worrying about the CRT version?

How do you write code that allows this or is it the linking process? yaml-cpp is a cross platform library, is it possible for me to compile it in a similar way that would allow me to use a single .lib within my project?

I am not sure what resources to look for to learn more about it. How do people learn about this kind of stuff? Thanks!

like image 870
Mark Stahler Avatar asked Nov 11 '22 18:11

Mark Stahler


1 Answers

The reason that a .lib and dll can work with a variety of compilers is down to ensuring that there are no compiler-specific dependencies in your code. .lib and .dll are not recompiled so once they are made they should be stand-alone if so coded, and their functionality can be accessed from anywhere with the ability to use a .dll or a .lib.

There is some discussion on the pros and cons of dll and lib here which you may find interesting.

Let me know if you need more info and I will do my best to oblige.

like image 130
GMasucci Avatar answered Nov 15 '22 12:11

GMasucci