Home  >  Article  >  Backend Development  >  VS2017 completes the construction of static library

VS2017 completes the construction of static library

Y2J
Y2JOriginal
2017-05-12 10:13:103853browse

This article mainly introduces the relevant information of writing static libraries in Visual Studio 2017 in detail, which has certain reference value. Interested friends can refer to it

Making wheels is an interesting thing , VS is a powerful tool that is capable of very large-scale projects, but to be honest, it is not so friendly to configure smaller projects (other tutorials on the Internet are not Orz friendly at all). Here I show you the correct approach to building a simple static library. (By the way, teach me a little bit about creating solutions - many people can’t figure out the difference between Project and Solution. In VS, Project is the basic execution unit, and a Solution can contain multiple Projects. ——Our static library will contain several (.lib) Projects and one (.exe) Project for testing. The solution is to choose the win32 Console Application console. ##Select Static Library as the type and remove the Precompiled Header option.

#Add header files and source files. #The same goes for the source file .cpp. It should look like this afterwards:

(Note that it will not work to only add the .h file without the .cpp. Such a The project cannot compile the .lib library, and when you test it, errors such as ""xxx.lib": cannot open file specified" will appear. Don't ask me how I know Orz)

(Another kind The reason why I cannot open file specified is that the location where .lib is generated is wrong. Here, see Solution Explorer->Properties

attribute

page

##-> Output Direction output directory

The default one is in the \Debug directory, who knows how it could be wrong)

Then you can write the code:

//  MathLib.h
#pragma once
int add(int x, int y);
//  MathLib.cpp
#include "MathLib.h"
int add(int x, int y) { return x + y; }

Then you need a Project to test (recall what I said at the beginning, a Solution can have multiple Projects, they are all execution units (I will talk about how to call an execution unit later). This is a concept I created myself. )), add a new project to Solution in Solution Explorer:

Select the console and remove the precompiled header as before. Now we have a project containing two Projects Solution:

Write a test code

//  Test.cpp

#include "stdafx.h"
#include "..\MathLib\MathLib.h"
#include <iostream>

int main()
{
  std::cout << add(1, 2) << std::endl;
  return 0;
}

Now you need to add a

reference to MathLib

for Test. The actual function of this step is , when guiding the IDE to compile with the cl compiler command line, add the correct link options (CSAPP has a very inspiring explanation. After the source file #includes the header file, it only introduces a bunch of unrelocated symbols to the linker. It You need to find these symbols in the library file (for static libraries,

Linux is a .a file and Windows is .lib) to complete the relocation). It is very important to find these libraries. Add Reference in Solution Explorer as shown in the figure

VS very considerately lists the Projects in Solution as options, just select it.

At this time, there is a MathLib project in the Reference of Test. Next step, add the include path for the cl compiler, that is, how to find MathLib.h during the pre-compilation period to complete the introduction of symbols. In the Test Properties property page->C++->General->Additional Include Directaries, the additional include paths are directories included in other (custom) header files in addition to the standard library header file directories. cl should go to these places to find MathLib .h. Select OK to add the MyStaticLibrary\MathLib directory.

Everything is ready at this time, and the F5 build and run result reported this error:

It says that .lib is not a valid win32 application and cannot run. Yes, I didn't want to run it originally, but how does VS know which one of so many Projects in Solution should be run? (Think about the previous execution unit and understand what it means. The compilation result of each Project is considered executable) The first added Project is MathLib, so VS runs its output by default, so it is wrong. Find a way to guide VS to run the output of Test (Test.exe), Solution Explorer->MyStaticLibrary Properties property page:

Set the single startup project to Test, OK.

【Related Recommendations】

1. ASP Free Video Tutorial

2. ASP Tutorial

3. Li Yanhui ASP basic video tutorial

The above is the detailed content of VS2017 completes the construction of static library. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn