라이브러리 사용 방법
어떤 이유로 어떤 언어로도 외부 라이브러리를 사용할 수 없습니다. 외부 라이브러리를 사용하는 방법과 작동 방식에 대한 지침 / 설명을 찾고 있습니다. 온라인에서 검색 할 때 다운로드하여 사용하는 라이브러리에 적용되지 않는 조각을 얻습니다. 저는 Mac과 PC에서 모두 작업하며 C ++ 예제는 괜찮습니다. C ++ 플러그인과 함께 Eclipse IDE를 사용합니다. 모든 라이브러리에 적용되는 지침이 있다면 좋을 것입니다.
Unuseful
다음과 같이 정의 된 클래스가 있다고 가정합니다 .
파일 Unuseful.h
:
class Unuseful {
public:
void printUnusefulStatement();
};
파일 Unuseful.cpp
:
#include "unuseful.h"
#include <iostream>
void Unuseful::printUnusefulStatement()
{
std::cout << "Hello world!" << std::endl;
}
이제 쓸모없는 문장을 인쇄해야하는 또 다른 클래스가 있습니다.
Unuseful u;
u.printUnusefulStatement();
즉, printUnusefulStatement
코드에 포함하려는 특정 구현 ( )이 포함 된 외부 라이브러리를 사용 하려고합니다.
이 라이브러리는 두 가지 방법으로 사용할 수 있습니다.
- 컴파일러에 소스 코드를 제공함으로써
- 이진 파일 (이전에 아키텍처 용으로 컴파일 된)을 링커에 제공하여
사례 1 : 컴파일 타임에 라이브러리 사용
이것은 가장 간단한 경우입니다. 사용해야하는 라이브러리의 소스 코드가 있고 기존 코드 (예 : main.cpp
파일) 와 함께 컴파일하기 만하면 됩니다. 일반적으로 귀하는 라이브러리 (필요한 작업을 수행하는 클래스)의 작성자이자 사용자입니다.
이 명령으로 컴파일 :
g++ main.cpp unuseful.cpp
main.cpp
파일 에서 필요한 구현을 사용할 수 있습니다.
사례 2 : 라이브러리 연결
Case 1 보다 더 자주 사용하려는 라이브러리의 소스 코드가 없습니다. 헤더 파일 ( Unuseful.h
, 예를 계속하려면)과 정적 또는 공유 라이브러리 ( 각각 [*] libunuseful.a
및 libunuseful.so
파일) 만 있습니다.
정적 라이브러리는 *.o
최종 실행 파일 내부에 링크 된 객체 파일 ( ) 의 아카이브이며 , 대신 공유 라이브러리는 런타임에 동적으로로드됩니다 ( 차이점을 더 잘 이해하려면 이 페이지 를 참조하십시오 ).
정적 라이브러리는 단순히 프로그램을 사용 하여 *.o
파일을 보관함으로써 생성됩니다 ar
.
# Create the object files (only one here)
g++ -c unuseful.cpp
# Create the archive (insert the lib prefix)
ar rcs libunuseful.a unuseful.o
공유 라이브러리는 다음 g++
-shared
옵션 으로 생성됩니다 .
# Create the object file with Position Independent Code[**]
g++ -fPIC -c unuseful.cpp
# Crate the shared library (insert the lib prefix)
g++ -shared -o libunuseful.so unuseful.o
이제 Unuseful.h
파일과 공유 라이브러리 ( libunuseful.so
file)가 있고 객체 main.cpp
를 인스턴스화 Unuseful
하고 printUnusefulStatement
메서드를 호출 하는 파일이 있다고 가정 해 보겠습니다 .
이 파일 ( g++ main.cpp
) 을 컴파일하려고 하면 링커가 printUnusefulStatement
심볼을 찾을 수 없기 때문에 불평 할 것 입니다.
라이브러리를 사용할 시간입니다.
g++ main.cpp -L. -lunuseful
이 -L
옵션은 링커에게 라이브러리 파일을 검색 할 위치를 -l
알려주고 플래그는 링커에게 사용할 라이브러리 이름 ( lib
접두사 없이 )을 알려줍니다 .
이제 실행 파일 ( a.out
, 다른 이름을 지정하지 않았기 때문에)이 생성되고 라이브러리를 사용하여 필요한 기능을 구현했습니다 ( printUnusefulStatement
).
Since the shared library is loaded at run-time, the execution of the a.out
executable may fail because the system is not able to find the library. Typically this can be solved by appropriately setting an environment variable indicating which paths to use to search for dynamic libraries:
# Set the LD_LIBRARY_PATH [*]
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
Done, now your executable has been compiled and it will be able to run and load the library it needs.
Conclusion
This is a rapid overview on libraries which I hope can help you understand how they are used and provided to others.
There are many many aspects that should be investigated in more detail, if you are interested: g++
options when creating shared libraries, ar
options, environment variables, the shared libraries format and so on.
[*]: In a Unix environment
[**]: If supported for the target machine, emit position-independent code, suitable for dynamic linking and avoiding any limit on the size of the global offset table. This option makes a difference on the m68k, PowerPC and SPARC. Position-independent code requires special support, and therefore works only on certain machines. [From the g++ man page]
Here's where you start http://en.wikipedia.org/wiki/Library_(computing)
Basically, a 'library' is a collection of compiled functions and class declarations.
On a Mac there are also "frameworks" which are somewhat similar to Pascal's units and contain both the declarations and the compiled code.
In managed languages like Java or C# there are packages and assemblies. Both are closely related to libraries.
To use libraries in C or C++ you've got to have a .lib-file (or .a-file for most POSIX or GCC toolchain based compilers) and the prototypes of the functions which are compiled into the .lib file. Depending on your development environment (for Eclipse you are most likely using the GCC compiler and GNU toolchain with LD linker), you just specify the library files (.lib or .a) as the input to the linker. Most of the time the library is accompanied with header files which contain the definitions of function prototypes.
Even if you did not know about the linker, which is strange enough, the libraries are still used in your program implicitly - the std::cout is in the libstdc++ or the C Run-Time Library.
As an example of a huge library and a useful set of C++ classes you might want to look at Boost.
To write GUI on Windows you can use the WinAPI which is described in MSDN.
To write GUI on Mac you can use Carbon API which is somewhat similar to WinAPI, but is now deprecated. The only way to write "legit" GUI for MacOS is to use Cocoa and Objective-C.
To write cross-platform GUI you can use a lot of libraries: Qt, wxWidgets, GTK among them.
The last, but not the least. C++ is not the best language for GUI.
The best way to use external C++ libraries is make use of a C++ package manager, go and learn of these;
Some of them involve using CMake, you can find a well written tutorial on it here.
.
참고URL : https://stackoverflow.com/questions/10358745/how-to-use-libraries
'program tip' 카테고리의 다른 글
5GB보다 큰 파일에 대해 Amazon-S3 Etag를 계산하는 알고리즘은 무엇입니까? (0) | 2020.11.24 |
---|---|
jquery, 지우기 / 비우기 tbody 요소의 모든 내용? (0) | 2020.11.23 |
Python 용 Postgres를 설치하는 중 오류 (psycopg2) (0) | 2020.11.23 |
Python Pandas 사용자 경고 : 비 연결 축이 정렬되지 않아 정렬 중입니다. (0) | 2020.11.23 |
Perl에서 my와 local의 차이점은 무엇입니까? (0) | 2020.11.23 |