⑴ c++中, 編譯鏈接產生的目標文件在哪個目錄下
vs 一般在工程目錄下的debug/release下, 如果是64位系統,根據你選擇編譯位數找一下x86或者x64文件夾下
自己手動通過cl 編譯連接,則會在你指定的位置(默認是當前目錄下)生成obj文件
⑵ (linux)動態鏈接庫找不到路徑
ld.so.conf只是在編譯時查找動態庫的路徑;
運行時動態庫的查找路徑默認在/usr/lib和/lib,所以找不到
可以設置LD_LIBRARY_PATH=/usr/local/ma(你動態庫的所在目錄)
或者把動態庫拷貝到/usr/lib或/lib下
⑶ 為什麼.o鏈接未so庫符號丟失了
o鏈接未so庫符號丟失了原因交叉應用程序的開發需要用到交叉編譯的鏈接庫,我們在移植應用程序到我們的目標板。
鏈接庫的目錄是/usr/local/arm/arm-linux/lib,將其中部分庫文件及符號鏈接拷貝到root_nfs(你創建的busybox的根目錄)文件夾下的lib文件夾中。
extern:
extern是編程語言中的一種屬性,它表徵了變數、函數等類型的作用域(可見性)屬性,是編程語言中的關鍵字。當進行編譯時,該關鍵字告訴編譯器它所聲明的函數和變數已在其他文件中定義。
可以在本模塊或者文件以及其他模塊或文件中使用。通常,程序員會在 "*.c" 文件中聲明定義變數或定義函數,並在「*.h」(頭文件)中使用該關鍵字限定變數或函數等,然後可在該頭文件或其他模塊中include使用。
⑷ 如何編譯 opencv動態鏈接庫
在一個項目中需要用到OpenCV,剛開始使用了OpenCV的動態鏈接庫,這樣,在移動可執行程序時還必須將OpenCV動態支持庫一起搬移,很是麻煩。所以,最終選擇OpenCV靜態鏈接庫,這樣程序移植運行就方便了很多。
需要編譯成靜態庫以便於應用程序鏈接。
網上有的教程中寫的在VC++2010下安裝OpenCV2.1時用到了TBB庫,而我在編譯鏈接自己的程序後需要用到TBB.dll。本人設計的目的就是要做一個獨立的界面程序,不需要攜帶其他第三方庫。經過一段時間的努力最終找到了編譯OpenCV2.1靜態庫的方法。
需要的工具環境及文件:
-------------------------------------------------------------------------------------------------------------
1、Windows XP
2、VC++2010(VS2010)
3、為編譯OpenCV源碼包(我下載的有:OpenCV2.1.0,OpenCV2.3.0及OpenCV2.4.4)
4、CMake2.8.9
說明:OpenCV各版本官方下載地址:opencv.org/
cmake-2.8.9下載地址:ishare.iask.sina.com.cn/download/explain.php?fileid=35025936
--------------------------------------------------------------------------------------------------------------
以OpenCV2.1.0編譯靜態庫為例
CMake配置
-------------------------------------------------------------------------------------------------------------
打開CMake並設置:
Where is the rource code :OpenCV源代碼所在的文件夾
Where to build the binaries:CMake配置好得到的文件放在位置(我的:E:\OpenCV2.1.0-prj)
然後點擊configure,選擇"Visual Studio 10"。然後確定。
等待configure完成,會出現很多紅色的選項,因為主要是生成OpenCV的庫,所以只需保留某些選項:
去掉BUILD_NEW_PYTHON_SUPPORT,BUILD_SHARED_LIBS, BUILD_TESTS
勾選OPENCV_BUILD_3RDPARTY_LIBS, WITH_TBB,WITH_JASPER, WITH_JPEG,
WITH_PNG, WITH_TIFF選項,
然後再點擊configure,如下圖:
提示TBB_INCLUDE_DIR找不到,因為我們不需要TBB庫,所以忽略,再一次點擊configure。
等待配置完成,最後點擊generate,完成後關閉CMake。
-------------------------------------------------------------------------------------------------------------
VC++2010編譯靜態庫
-------------------------------------------------------------------------------------------------------------
進入E:\OpenCV2.1.0-prj目錄,使用VC++2010打開.sln文件,打開項目管理器
這時候會看到
解決方案中有很多小項目存在。
註:這時我們右鍵任意點擊一個子項目(如cv),選擇屬性,可以在配置屬性下的常規項目中看到,配置類型為
靜態庫(lib)。
按住ctrl鍵,選中除過ALL_BUILD, INSTALL, ZERO_CHECK,
uninstall四個項目的其他所有項目,在菜單中選擇項目->屬性,打開配置屬性->c/c++->代碼生成選項,在右側窗口中的運行時庫中選擇多線程調試(/MTd),然後確認。
說明:這里有四個選項(/MT, /MTd, /MD,
/MDd),前兩個一組,為靜態鏈接運行時庫,運行時不需要運行時庫的支持,代碼直接插入到程序中去;後兩個一組,為動態鏈接運行時庫,運行時需要msvcr90.dll或msvcp90.dll支持。
我們先編譯Debug版的OpenCV靜態庫,在解決方案"opencv"(22個項目)上單擊右鍵,選擇重新生成解決方案,此時便開始編譯OpenCV庫了,等編譯結束會提示完成16個,失敗4個:
這四個項目生成的是exe程序,不需要管他們。到這步我們已經生成了Debug版本的靜態庫!
然後我們用相同的方式生成Release版的庫,在之前的基礎上只需要將選項選擇多線程/MT,再進行編譯。編譯時警告很多,直接忽略!
注意:/MT即是Release版本,/MTD即是Debug版本。
最終我們需要的靜態庫就存在:E:\OpenCV2.1.0-prj/lib 和 E:\OpenCV2.1.0-prj/3rdparty/lib
兩個目錄,我們編譯好的庫就在這兩個文件夾下。分別
將E:\OpenCV2.1.0-prj/3rdparty/lib中Debug
下面的所有文件Copy到E:\OpenCV2.1.0-prj/lib中的Debug 文件中。
將E:\OpenCV2.1.0-prj/3rdparty/lib中Release下面的所有文件Copy到E:\OpenCV2.1.0-prj/lib中的Release文件中。
⑸ linux下將程序中用到的第三方庫編譯到自己的程序中
舉例,頭文件名 abc.h 函數名為 abc_test(); 第三方庫頭文件目錄為/abc/include/ 鏈接庫目錄為/abc/lib/ 1、頭文件和源文件:這是最好的情況,引用頭文件和相關函數即可。 如:#include "abc.h" abc_test();//直接調用即可 編譯時,Makefile中加入編譯選項 -I/abc/include 為了能將庫的頭文件引進來。 而且你的程序運行時,不再需要這個第三方庫。 2、靜態鏈接庫:引用頭文件和相關函數,設提供的靜態庫名為 libabc.lib 編譯時,Makefile中加入 編譯選項 1)-I/abc/include #編譯時加,為了能將庫的頭文件引進來; 2)-L/abc/lib -labc #鏈接時加的 而且你的程序運行時,不再需要這個第三方庫。 3、動態鏈接庫,設動態鏈接庫為libabc.so 調用動態鏈接庫文件,需要dlopen等函數 編譯時,Makefile中加入 編譯選項 1)-I/abc/include #編譯時加,為了能將庫的頭文件引進來; 2)-L/abc/lib -labc #鏈接時加的 注意:你的程序運行時,需要這個第三方庫的libabc.so文件。
⑹ windows下qt怎麼編譯靜態鏈接庫
1. 安裝Qt,全部勾選安裝. qt-opensource-windows-x86-mingw530-5.8.0.exe
2. 安裝Perl, 下載地址:https://www.activestate.com/activeperl/downloads
安裝目錄:D:\ProgramFiles\Perl64
環境變數安裝過程自動添加的,如果沒有添加,手動添加:
D:\ProgramFiles\Perl64\site\bin;
D:\ProgramFiles\Perl64\bin;