在vc6下編譯jrtplib,但編譯example1.cpp時產生了很多錯誤,有以下幾種情況:
1) use run-time library的設定一定要統一。
2) vc產生的workspace的debug setting,預設有個gz選項,
catch release-build errors in debug build,編譯的時候
會說error lnk2001: unresolved external symbol __chkesp,
去掉就好了。
3) 如果報有link2001其中有getusername錯誤,加入windows.h標頭檔案,並且增加advapi32.lib庫
一、出現的問題之一
example2.obj : error lnk2019: 無法解析的外部符號
"public: virtual __thiscall rtpsession::~rtpsession(void)" (??1rtpsession@@uae@xz) ,該符號在函式 _main 中被引用
example2.obj : error lnk2019: 無法解析的外部符號 __imp__wsacleanup@0 ,該符號在函式 _main 中被引用
example2.obj : error lnk2019: 無法解析的外部符號 "public: void __thiscall rtpsession::byedestroy(class rtptime const &,void const *,unsigned int)" (?byedestroy@rtpsession@@qaexabvrtptime@@pbxi@z) ,該符號在函式 _main 中被引用
example2.obj : error lnk2019: 無法解析的外部符號 "public: int __thiscall rtpsession::enddataaccess(void)" (?enddataaccess@rtpsession@@qaehxz) ,該符號在函式 _main 中被引用
很明顯,是關於類rtpsession的問題,問題出在缺少lib庫jrtplib.lib。
解決:加入
#pragma comment (lib, "jrtplib.lib")
#pragma comment (lib, "jthread.lib")
也可以在「鏈結器」中「附加依賴項」中新增這些庫。
二、出現如下問題:
msvcprtd.lib(msvcp71d.dll) : error lnk2005: "public: __thiscall std::basic_string,class std::allocator >::~basic_string,class std::allocator >(void)" (??1?$basic_string@du?$char_traits@d@std@@v?$allocator@d@2@@std@@qae@xz) 已經在 example2.obj 中定義
msvcprtd.lib(msvcp71d.dll) : error lnk2005: "public: __thiscall std::basic_string,class std::allocator >::basic_string,class std::allocator >(char const *)" (??0?$basic_string@du?$char_traits@d@std@@v?$allocator@d@2@@std@@qae@pbd@z) 已經在 example2.obj 中定義
msvcprtd.lib(msvcp71d.dll) : error lnk2005: "public: __thiscall std::basic_string,class std::allocator >::basic_string,class std::allocator >(class
解決方法:設定vc執行庫(c/c++->codegeneration->use runtime library 選multithreaded dll buildblog,再次提醒大家注意觀察 buildblog裡面的提示。
因為執行時庫的版本問題。vc編譯器的執行時庫有多個選項:/ml、/mld、/mt、/mtd、/md、/mdd。這些選項告訴編譯器應用程式想使用什麼版本的c標準程式庫。這樣會在執行時選擇不同版本的庫。
三、問題如下:
example2.obj : error lnk2019: 無法解析的外部符號__imp__wsacleanup@0 ,該符號在函式 _main 中被引用
example2.obj : error lnk2019: 無法解析的外部符號 __imp__wsastartup@8 ,該符號在函式 _main 中被引用
jrtplib.lib(rtpsession.obj) : error lnk2019: 無法解析的外部符號 __imp__gethostname@8 ,該符號在函式 "private: int __thiscall rtpsession::createcname(unsigned char *,unsigned int *,bool)" (?createcname@rtpsession@@aaehpaepai_n@z) 中被引用
jrtplib.lib(rtpudpv4transmitter.obj) : ················
解決方法:#pragma comment (lib, "ws2_32.lib")
四,問題如下:
link : warning lnk4098: defaultlib "libcmt" conflicts with use of other libs; use /nodefaultlib:library
jrtplib.lib(rtpsession.obj) : error lnk2001: unresolved external symbol __imp__getusernamea@8
libcmtd.lib(wincrt0.obj) : error lnk2001: unresolved external symbol _winmain@16
debug/testjrtp.exe : fatal error lnk1120: 2 unresolved externals
增加advapi32.lib ,並加入windows.h即可.
(至於winmain錯誤,則重新在example中生成工程檔案即可.至於那些庫的標頭檔案,通過option中的路徑設定為預設即可.)
總之在project中setting增加如下庫jrtplib.lib jthread.lib ws2_32.lib advapi32.lib
即可.
交叉編譯jrtplib 問題
問題描述 1 安裝包 jrtplib 3.7.1.tar.gz jthread 1.2.1.tar.gz 2 步驟 分別解壓兩個安裝包 進入jthread 1.2.1使用.configure host arm linux cc arm linux gcc cxx arm linux g 命令配置 m...
jrtplib 3 9 1 arm 交叉編譯
後,分別解壓,在解壓目錄中能看到乙個cmakelist.txt的檔案 2.修改兩個解壓目錄下的cmakelist.txt 告知當前使用的是交叉編譯方式 set cmake system name linux 設定c編譯器 set cmake c compiler arm none linux gnu...
Linux下編譯jrtplib和jthread
和 2.將原始檔放到如下任意目錄中,這裡假設放到主目錄下 home nick 分別解壓 tar xzvf 為檔名。解壓後出現兩個目錄,乙個是jrtplib 3.7.1,乙個是jthread 1.2.1。然後進行安裝,先安裝jthread,再安裝jrtplib。3.jthread安裝 進入jthead...