Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++. Π‘Π±ΠΎΡ€Π½ΠΈΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 11

Автор Π”. БтСфСнс

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1.7. ИспользованиС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° visibility с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки -fvisibility=hidden

extern __attribute__((visibility("default"))) int m; // экспортируСтся

extern int n; // Π½Π΅ экспортируСтся


__attribute__((visibility("default"))) void f(); // экспортируСтся

void g(); // Π½Π΅ экспортируСтся

struct __attribute__((visibility("default"))) S { }; // экспортируСтся

struct T { }; //Π½Π΅ экспортируСтся

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1.7 Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ __attribute__((visibility("default"))) ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ Ρ€ΠΎΠ»ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ __declspec(dllexport) Π² ΠΊΠΎΠ΄Π΅ Windows.

ИспользованиС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° visibility прСдставляСт Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‡Ρ‚ΠΎ ΠΈ использованиС __declspec(dllexport) ΠΈ __declspec(dllimport), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Π°ΠΌ трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ присутствовал ΠΏΡ€ΠΈ сборкС ΠΎΠ±Ρ‰Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ отсутствовал ΠΏΡ€ΠΈ компиляции ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ эту ΠΎΠ±Ρ‰ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ отсутствовал Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…. Как ΠΈ Π² случаС с __declspec(dllexport) ΠΈ __declspec(dllimport), эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прСпроцСссора. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» georgeringo.hpp ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 1.2 Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ видимости, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

georgeringo/georgeringo.hpp


#ifndef GEORGERINGO_HPP_INCLUDED

#define GEORGERINGO_HPP_INCLUDED


// ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ GEORGERINGO_DLL ΠΏΡ€ΠΈ сборкС libgeorgeringo

#if defined(_WIN32) && !defined(__GNUC__)

#ifdef GEORGERINGO_DLL

#define GEORGERINGO_DECL __declspec(dllexport)

#else

#define GEORGERINGO_DECL __declspec(dllimport)

#endif

#else // Unix

# if defined(GEORGERINGO_DLL) && defined(HAS_GCC_VISIBILITY)

# define GEORGERINGO_DECL __attribute__((visibility("default")))

# else

#define GEORGERINGO_DECL

#endif

# endif


// ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ "George, and Ringo\n"

GEORGERINGO_DECL void georgeringo();


#endif // GEORGERINGO_HPP_INCLUDED

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈ сборкС Π² систСмах, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ†ΠΈΡŽ -fvisibility, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ макрос HAS_GCC_VISIBILITY.

ПослСдниС вСрсии компилятора Intel для Linux Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠΏΡ†ΠΈΡŽ -fvisibility.

Π’ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ символов Π² Metrowerks для Mac OS X

Metrowerks для Mac OS X прСдоставляСт нСсколько ΠΎΠΏΡ†ΠΈΠΉ для экспорта символов ΠΈΠ· динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠŸΡ€ΠΈ использовании IDE CodeWarrior Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» экспорта символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΡŒ Ρ„Π°ΠΉΠ»Π° .def Π² Windows. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС символы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ -export all, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ сборкС ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки являСтся ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π― Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ для ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ Π² вашСм исходном ΠΊΠΎΠ΄Π΅ экспортируСмых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ #pragma export, ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС -export pragma ΠΏΡ€ΠΈ сборкС динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ИспользованиС #pragma export ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1.2: просто Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ #pragma export on Π² Π²Π°ΡˆΠΈΡ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… сразу ΠΏΠ΅Ρ€Π΅Π΄ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ трСбуСтся ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π° сразу послС Π½Π΅Π΅ β€” #pragma export off. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваш ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π» с инструмСнтариСм, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΡ‚ Metrowerks, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ обращСния ΠΊ #pragma export ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ #ifdef/#endif, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1.2.

ΠžΠΏΡ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ посмотрим Π½Π° ΠΎΠΏΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°Π±Π». 1.11. КаТдая строка ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ опрСдСляСт:

β€’ ΠΈΠΌΡ (ΠΈΠΌΠ΅Π½Π°) Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (Ρ„Π°ΠΉΠ»ΠΎΠ²): george.obj, ringo.obj ΠΈ georgeringo.obj;

β€’ ΠΈΠΌΡ создаваСмой динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ;

β€’ Π² Windows имя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΈ, которая Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π΅ΠΌΡƒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π° Π½Π΅ исполняСмый Ρ„Π°ΠΉΠ». Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠΏΡ†ΠΈΡŽ -shared, Π½ΠΎ Visual C++ ΠΈ Intel для Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ -dll, Borland ΠΈ Digital Mars ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ -WD, a GCC для Mac OS X ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ -dynamiclib.

НСсколько ΠΎΠΏΡ†ΠΈΠΉ Π² Ρ‚Π°Π±Π». 1.11 ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ эффСктивному использованию динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π²ΠΎ врСмя выполнСния. НапримСр, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°ΠΌ для Unix трСбуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ -fPIC ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСзависимый ΠΎΡ‚ полоТСния ΠΊΠΎΠ΄ (position- independent code) (GCC ΠΈ Intel для Linux). Π­Ρ‚Π° опция ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ нСсколько процСссов смогут ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ копию ΠΊΠΎΠ΄Π° динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. На Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах отсутствиС этой ΠΎΠΏΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°. Аналогично Π² Windows опция ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° GCC --enable-auto-image-base сниТаСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ опСрационная систСма попытаСтся Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π²Π΅ динамичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ мСсто. ИспользованиС этой ΠΎΠΏΡ†ΠΈΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ DLL.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ Π² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ GCC ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· компилятор, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΡŽ g++ -Wl,<option>. (Π—Π° Π±ΡƒΠΊΠ²ΠΎΠΉ W слСдуСт строчная Π±ΡƒΠΊΠ²Π° l.)

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для указания Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ описываСтся Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π΅ 1.23.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅

Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ 1.9, 1.12, 1.17, 1.19 ΠΈ 1.23.

1.5. Π‘Π±ΠΎΡ€ΠΊΠ° слоТного прилоТСния ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для сборки исполняСмого Ρ„Π°ΠΉΠ»Π°, зависящСго ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… статичСских ΠΈ динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, инструмСнты ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

РСшСниС

НачнитС со сборки статичСских ΠΈ динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зависит вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Если Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΎΡ‚ сторонних Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², слСдуйтС инструкциям, поставляСмым с этими Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС собСритС ΠΈΡ… Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ описано Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ… 1.3 ΠΈ 1.4.

Π—Π°Ρ‚Π΅ΠΌ скомпилируйтС Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ .cpp-Ρ„Π°ΠΉΠ»Ρ‹ своСго прилоТСния, ΠΊΠ°ΠΊ описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π‘Π±ΠΎΡ€ΠΊΠ° простой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Β«Hello, WorldΒ» ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки». Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ компилятору, Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ для вашСго прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ -I, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ‚Π°Π±Π». 1.12.


Π’Π°Π±Π». 1.12. Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ для поиска Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠžΠΏΡ†ΠΈΡ ВсС -I<дирСктория>

НаконСц, для создания исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈΠ±ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈ имя, Π»ΠΈΠ±ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ, Π³Π΄Π΅ Π΅Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ.

На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стадии этого процСсса ΠΏΡ€ΠΈ использовании инструмСнтария, поставляСмого со статичСским ΠΈ динамичСским Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΈ Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ хотя Π±Ρ‹ ΠΎΠ΄Π½Ρƒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ компилятору ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, ΠΊΠ°ΠΊ описано Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π΅ 1.23.

Π’Π°Π±Π»ΠΈΡ†Π° 1.13 прСдоставляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ прилоТСния hellobeatles ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 1.3. Она ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ:

β€’ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ являСтся hellobeatles;

β€’ ΡΡ‚атичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° libjohnpaul.lib ΠΈΠ»ΠΈ libjohnpaul.Π° Π±Ρ‹Π»Π° создана Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ johnpaul;

β€’ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° georgeringo.dll, georgeringo.so ΠΈΠ»ΠΈ georgeringo.dylib ΠΈ, Ссли Π΅ΡΡ‚ΡŒ, Π΅Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π±Ρ‹Π»ΠΈ созданы Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ georgeringo.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Comeau, ΠΊΠ°ΠΊ сказано Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π΅ 1.4, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ динамичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, строка для Comeau Π² Ρ‚Π°Π±Π». 1.13 ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ libgeorgeringo Π±Ρ‹Π»Π° создана ΠΊΠ°ΠΊ статичСская, Π° Π½Π΅ ΠΊΠ°ΠΊ динамичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ libgeorgeringo ΠΊΠ°ΠΊ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1.2 ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΈΠ· объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ georgeringo() ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ GEORGERINGO_DECL.


Π’Π°Π±Π». 1.13. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ для ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ прилоТСния hellobeatles.exe

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Командная строка GCC (Unix) hellobeatles.o libjohnpaul.a libgeorgeringo.so g++ -ΠΎ hellobeatles hellobeatles.o -L ./johnpaul -L./georgeringo -ljohnpaui -lgeorgeringo ΠΈΠ»ΠΈ g++ -o hellobeatles hellobeatles.o ./johnpaul/libjohnpaul.a ./georgeringo/libgeorgeringo.so Intel (Linux) icpc -o hellobeatles hellobeatles.o -L./johnpaul -L./georgeringo -ljohnpaul -lgeorgeringo ΠΈΠ»ΠΈ icpc -ΠΎ hellobeatles hellobeatles.o ./johnpaul/libjohnpaul.a ./georgeringo/libgeorgeringo.so Comeau (Unix) como -no_prelink_verbose -o hellobeatles hellobeatles.o -L./johnpaul L./georgeringo -ljohnpaul -lgeorgeringo ΠΈΠ»ΠΈ como -no_prelink_verbose -o hellobeatles hellobeatles.ΠΎ ./johnpaul/libjohnpaul.a ./georgeringo/libgeorgeringo.a GCC (Mac OS X) hellobeatles.ΠΎ libjohnpaul.a libgeorgeringo.dylib g++ -o hellobeatles hellobeatles.o -L/johnpaul -L./georgeringo -ljohnpaul -lgeorgeringo ΠΈΠ»ΠΈ g++ -o hellobeatles hellobeatles.o ./johnpaul/libjohnpaul.a ./georgeringo/libgeorgeringo.dylib Metrowerks (Mac OS X) mwld -o hellobeatles hellobeatles.ΠΎ -search -L/johnpaul -search -L ./georgeringo -ljohnpaui -lgeorgeringo ΠΈΠ»ΠΈ mwld -ΠΎ hellobeatles hellobeatles.ΠΎ ./johnpaul/libjohnpaul.a ./georgeringo/libgeorgeringo.dylib GCC (Cygwin) hellobeatles.ΠΎ libjohnpaul.a libgeorgeringo.dll.a g++ -ΠΎ hellobeatles hellobeatles.o -L./johnpaul -L./georgeringo -Ijohnpaul -Igeorgeringo ΠΈΠ»ΠΈ g++ -o hellobeatles hellobeatles.ΠΎ ./johnpaul/libjohnpaul.a ./georgeringo/libgeorgeringo.dll.a GCC (MinGW) hellobeatles.ΠΎ libjohnpaul.a libgeorgeringo.a g++ -o hellobeatles hellobeatles.o -L./johnpaul -L./georgeringo -Ijohnpaul -Igeorgeringo ΠΈΠ»ΠΈ g++ -ΠΎ hellobeatles hellobeatles.o ./johnpaul/libjohnpaul.a. /georgeringo/libgeorgeringo.a Visual C++ hellobeatles.obj libjohnpaul.lib libgeorgeringo.lib link -nologo -out:hellobeatles.exe -libpath:./johnpaul -libpath:./georgeringo libjohnpaul.lib libgeorgeringo.lib hellobeatles.obj Intel (Windows) xilink -nologo -out:hellobeatles -libpath:./johnpaul -libpath:./georgeringo.lib johnpaul.lib libgeorgeringo.lib hellobeatles.obj Metrowerks (Windows) mwld -o hellobeatles -search -L./johnpaul libjohnpaul.lib -search -L./georgeringo libgeorgeringo.lib hellobeatles.obj Metrowerks (Mac OS X)ΒΉ mwld -o hellobeatles hellobeatles.o -search -L./johnpaul -search -L./georgeringo libjohnpaul libgeorgeringo.dylib CodeWarrior 10.0 (Mac OS X)Β² Π‘Π²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ Metrowerks Borland bcc32 -q -WR -WC -ehellobeatles -L./johnpaul -L./georgeringo/libjohnpaul.lib libgeorgeringo.lib hellobeatles.obj Digital Mars link -noi hellobeatles.obj,hellobeatles.exe,NUL,user32.lib kernel32.lib ..\johnpaul\ .\georgeringo\libjohnpaul.lib libgeorgeringo.lib,, ΠΈΠ»ΠΈ link -noi hellobeatles.obj,hellobeatles.exe,NUL,user32.lib kernel32.lib ..\johnpaul\libjohnpaul.lib ..\georgeringo\libgeorgeringo.lib,, Comeau (Windows) hellobeatles.obj libjohnpaul.lib libgeorgeringo.lib como -no_prelink_verbose -o hellobeatles ./johnpaul/libjohnpaul.lib ./georgeringo/libgeorgeringo.lib hellobeatles.obj

ΒΉ ΠŸΡ€ΠΈ сборкС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки hellobeatles ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Metrowerks. (Π‘ΠΌ. Ρ€Π΅Ρ†Π΅ΠΏΡ‚ 1.23.)