1. 程式人生 > >動態庫載入動態庫使用gflags的方法

動態庫載入動態庫使用gflags的方法

最近做的專案,一個module需要載入多個外掛,外掛是用dlopen的方式載入的。module中使用一些gflags,而外掛中也需要使用gflags。

在module啟動時執行ParseCommandLineFlags,之後在載入外掛,讀取/proc/self/commandline中的資料,之後也執行ParseCommandLineFlags,但是在外掛中不能獲取相應的flags的值,見最後一個圖。

之後認真看了gflags的標頭檔案中的內容。下面的回答解決了我的問題,即在ParseCommandLineFlags之前加入AllowCommandLineReparsing(),之後在解析flags的時候執行ReparseCommandLineNonHelpFlags()就可以在外掛中解決不能獲取flags值問題。

解決這個問題後的反思:

遇到問題如果自己思考同時也不能通過搜尋獲取解決辦法,那麼就認真看原始碼很可能解決問題。

 

相關推薦

動態載入動態使用gflags方法

最近做的專案,一個module需要載入多個外掛,外掛是用dlopen的方式載入的。module中使用一些gflags,而外掛中也需要使用gflags。 在module啟動時執行ParseCommandLineFlags,之後在載入外掛,讀取/proc/self/comman

靜態呼叫靜態&靜態載入靜態------談談undefined reference to和linker input file unused because linking not done

          靜態庫可以呼叫靜態庫嗎? 靜態庫可以載入靜態庫嗎?  搞清這些東西, 對於linux開發很重要, 本文我們來探討這些問題。           先看程式:           business.h: #include <iostream>

C++批量載入動態函式方法

1、列舉定義enum  {    // 0 - GigE DLL (implicitly called)    Func_isVersionCompliantDLL,    Func_isDriverAv

關於程式執行時載入動態失敗的解決方法

一般我們在Linux下執行某些外部程式的時候可能會提示找不到共享庫的錯誤, 比如: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or direc

linux中動態載入動態方法

  dlopen()是一個強大的庫函式。該函式將開啟一個新庫,並把它裝入記憶體。該函式主要用來載入庫中的符號,這些符號在編譯的時候是不知道的。比如 Apache Web 伺服器利用這個函式在執行過程中載入模組,這為它提供了額外的能力。一個配置檔案控制了載入模組的過程。這種機制使得在系統中新增或者刪除一個模組

C++ 動態載入動態 呼叫中類 及類中方法

原文地址: https://stackoverflow.com/questions/26234327/qlibrary-import-a-class c++ 的類中方法定位是編譯時就完成的,而不是在run-time時去定位,所以動態載入時無法直接通過類名::函式名的方式呼叫

QT 載入靜態動態方法

載入動態庫 LIBS += -L./opencv249/vc10/bin -lopencv_core249 LIBS += -L./opencv249/vc10/bin -lopencv_highgui249 LIBS += -L./opencv249/vc10/bin

Visual Studio中根據系統區分引用64位、32位DLL動態文件的配置方法

問題 eight 找到 下拉 float c# more 遇到 語法 原來使用Win7的32位系統,進行C#工程的開發,後來重裝系統,換成了win7的64位系統 調試原來的工程,由於在其中引用了“SQLite”的32位的dll,導致在64為位下程序無法運行(但是編譯可以通

C#調用非托管動態中的函數方法

left tom -c too normal evel idt col class C#如何調用一個非托管動態庫中的函數呢,比如用VC6寫的動態庫,總之C#調用動態庫的過程是比Java調用DLL動態庫方便快捷多了,下面舉例說明這個過程。 1、創建一個非托管動態庫 代碼

Windows系統下靜態動態的使用方法

系統 comment 入庫 自己 動態庫 lib windows系統 window ont 使用靜態庫時,我們需要別人提供的頭文件和lib文件,然後在自己的工程的源文件(.cpp文件)中添加頭文件和#pragma comment(lib, "靜態庫的路徑") 使用動態庫時

Windows系統下靜態動態的生成方法

fine end def imp XP fin windows 靜態 style 靜態庫的生成方法:直接創建靜態庫項目,寫好功能後,編譯生成即可,把頭文件和靜態庫提供給別人即可使用 動態庫的生成方法:創建動態庫項目,在頭文件中寫入: #ifdef DLLEXPORT #de

採用dlopen、dlsym、dlclose載入動態連結【總結】

https://blog.csdn.net/qq_19399235/article/details/62579386 https://blog.csdn.net/shaosunrise/article/details/81161064 https://www.cnblogs.com/

Linux 動態載入

動態庫執行時搜尋順序 1.LD_PRELOAD   LD_PRELOAD是一個環境變數,用於動態庫載入,動態庫載入的優先順序最高;   2.-wl,-rpath   編譯目的碼時指定的動態庫搜尋路徑(指的是用-wl,-rpath),readelf -d 命令可以檢視編譯的目標檔案中rpat

沒有載入動態導致的error: symbol lookup error: undefined symbol

做了一個瀏覽器外掛,需要編譯為 abcPlugins.so , 這個.so需要呼叫另外一個業務庫 defLib.so裡面的函式。 把abcPlugins.so替換到目標板上,瀏覽器程序啟動不起來。   1. 查詢瀏覽器程序啟動過程錯誤    1

C++載入動態的形式來實現封裝

目錄結構 └── test ├── CMakeLists.txt ├── base.h //設定介面 ├── drive.cpp //具體實現 └── main.cpp

載入動態連結——dlopen dlsym dlclose

DLOPEN DLMOPEN DLCLOSE NAME     dlclose, dlopen, dlmopen - 開啟/關閉共享物件 SYNOPSIS #include <dlfcn.h> void *dlopen(const char *filename, int flags); int

Linux動態載入函式dlopen原始碼梳理(二)

中大概梳理了整個流程,還有_dl_map_object_from_fd(),以及link_map結構沒有進行分析,在這裡對這兩部分進行分析 由於_dl_map_object_from_fd()比較長,整個函式的程式碼就放到最後作為附錄,前面部分來一點點進行梳理。 一、

Windows開發之動態載入

前段時間寫程式碼,主程序要載入很多dll,剛開始寫的dll動態載入,好麻煩的說。老大說寫成靜態載入,理解錯了意思,改成了靜態庫,真的傻。好長時間沒寫動態庫,忘得差不多了,筆記裡也是簡單記了下。最後改成了個dll靜態載入,現在來總結一下吧。 動態庫,在Windows下為dll檔案,Linux下是so,這裡先不

動態函式載入的配置ldconfig與 /etc/ld.so.conf

ldconfig與 /etc/ld.so.conf 在瞭解了動態與靜態函式庫,也知道我們目前的 Linux 大多是將函式庫做成動態函式庫之後,再來要知道的就是,那有沒有辦法新增函式庫的讀取效能?我們知道記憶體的存取速度是硬碟的好幾倍,所以,如果我們將常用到的動態函式庫先載入