C++ 涓鐩存病鏈夊鏄庣櫧錛屽浜庝竴浜涢棶棰橈紝涓鐩翠篃娌℃湁瑙e喅銆? 浠婂ぉ灝濊瘯瑙e喅鐨勯棶棰橈紝鏉ユ簮浜庡井杞浣曟妸瀹冪殑搴撳疄鐜伴殣钘忚搗鏉ャ?/p>
涔嬪墠鐨勬兂娉曟槸錛屼笉綆″畾涔変綍縐嶇被鍜屾柟娉曪紝鎬誨簲璇ュ湪澶存枃浠朵腑鍑虹幇澹版槑錛? 浠庤岋紝涓浜沺rivate鐨勬柟娉曞拰鍙橀噺鎴戜滑涔熷簲璇ュ彲浠ユ帹鏂嚭鏉ャ? 浣嗘槸錛屼簨瀹炲茍涓嶆槸榪欐牱錛屽緢澶氭椂鍊欙紝鐪嬪埌鐨勫彧鏄痯ublic鐨勩?/p>
鑰屼粠鐞嗚涓婃潵璇達紝搴旇灝嗗疄鐜頒笌鎺ュ彛鍒嗙銆傚儚寰蔣鎻愪緵鐨勫ご鏂囦歡錛? 鐨勭‘宸茬粡瀹氫箟濂戒簡鍥哄畾鐨勬帴鍙c傝岃繖鏍鳳紝瀹冧滑鍙渶瑕佸啀鎻愪緵綾誨簱錛? 鎴戜滑灝卞彲浠ョ敤浜嗐?/p>
棣栧厛錛屽畾涔変竴涓О涓?MyClass 鐨勭被錛屼負浜嗘柟渚匡紝鎴戝垱寤轟簡涓涓洰褰曪紝 涓撻棬鐢ㄤ簬瀛樻斁緙栬瘧鎴戜滑鑷繁綾誨簱鐨勪唬鐮併?/p>
MyClass.h 鐨勪唬鐮侀潪甯哥畝鍗曪細
#ifndef MyClass_H #define MyClass_H class MyClass { public: void run(); }; #endif
榪欎釜涔嬪悗浼氭毚闇茬粰鐢ㄦ埛銆備絾鎴戜滑鍏堜笉榪涜瀹炵幇銆?/p>
涓嬮潰錛屽仛鐨勬槸鐪熸鐨勫伐浣滐紝鍗蟲垜浠笉闇瑕佺粰鐢ㄦ埛鐪嬬殑銆?/p>
瀹氫箟 PrivateMyClass.h 鍜?PrivateMyClass.cpp 銆?/p>
PrivateMyClass.h 鍐呭寰堢畝鍗曪細
#ifndef PrivateMyClass_H #define PrivateMyClass_H class PrivateMyClass { public: void canrun(); }; #endif
PrivateMyClass.cpp 涔熺畝鍗曪細
#include <iostream> #include "PrivateMyClass.h" void PrivateMyClass::canrun() { std::cout << "Begin Can RUN?" << std::endl; std::cout << "End Can RUN?" << std::endl; }
鐒跺悗錛屾垜浠湪 MyClass 鐨勫疄鐜頒腑錛岃皟鐢?PrivateMyClass 銆?/p>
MyClass.cpp 鍐呭錛?/p>
#include <iostream> #include "MyClass.h" #include "PrivateMyClass.h" void MyClass::run() { std::cout << "Begin RUN" << std::endl; PrivateMyClass pmc; pmc.canrun(); std::cout << "End RUN" << std::endl; }
鏈変簡榪欎簺錛屽氨鍙互緙栬瘧鍑哄姩鎬佸簱浜嗭紝鍐欎竴涓?Makefile 錛?/p>
lib:MyClass.o PrivateMyClass.o g++ -g -shared -o libresult.so MyClass.o PrivateMyClass.o MyClass.o:MyClass.cpp MyClass.h g++ -fPIC -Wall -g -c MyClass.cpp PrivateMyClass.o:PrivateMyClass.cpp PrivateMyClass.h g++ -fPIC -Wall -g -c PrivateMyClass.cpp
榪欐牱錛屾垜浠氨鍙妸 MyClass.h 鍜?libresult.so 緇欑敤鎴蜂簡銆? 鎴戞斁鍒皃ublic鐨勭洰褰曚笅銆?/p>
涓轟簡紜繚姝e父榪愯錛屽啓浠g爜嫻嬭瘯涓涓嬶細
#include "MyClass.h" int main() { MyClass mc; mc.run(); }
鐒跺悗鏄疢akefile錛?/p>
all:exe LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./result test1:exe LD_LIBRARY_PATH=../private/:$LD_LIBRARY_PATH ./result test2:exe LD_LIBRARY_PATH=../private-v2/:$LD_LIBRARY_PATH ./result exe:TestClass.o g++ -o result TestClass.o -L. -lresult TestClass.o:TestClass.cpp g++ -c TestClass.cpp
榪欎釜閲岄潰錛屽寘鍚簡鍙﹀鐨勪竴涓祴璇曪細鍗沖簱鏇存柊鍚庯紝 鎴戞槸鍚﹀彲浠ヤ笉閲嶆柊緙栬瘧鐢ㄦ埛浠g爜銆?/p>
緇撹鏄紝鍙互涓嶇敤閲嶆柊緙栬瘧鐢ㄦ埛浠g爜銆?/p>