鱼C论坛

 找回密码
 立即注册
查看: 93|回复: 11

C++中的gui问题

[复制链接]
发表于 2025-2-8 22:20:05 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就是我现在是在一个公司里做gui,gui界面全都有 但是对应的动作(c++)不全面,有些C++不存在,设备也能正常工作,一开始发现是有sdk包,打开一开全是.h头文件,却没有.cpp文件!这是第一个问题。
第二个问题是,gui界面中有clicked事件,找这个事件名也找不到,删掉之后,对应的功能也不在!有点不懂,请大神帮忙解惑一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-2-8 22:20:37 | 显示全部楼层
回答:

第一个问题:
你发现的 SDK 包中只有 .h 头文件却没有 .cpp 文件,可能是因为该 SDK 提供的是预编译库(静态库或动态库),因此你看不到源码文件。你需要确认以下几点:
  • 检查 SDK 的文档,看看是否有说明如何链接预编译库(例如 .lib 或 .dll 文件)。
  • 确保你的项目正确包含这些库文件,并在编译器设置中配置好库路径。
  • 检查头文件中的函数声明,在项目中调用这些函数,并链接对应的库文件。


第二个问题:
看到 GUI 界面中有 clicked 事件,但找不到事件的实现,可能是因为点击事件绑定了动态信号槽机制。通常在 Qt 这种框架中,你会这样定义和连接点击事件:
QObject::connect(button, &QPushButton::clicked, this, &YourClass::yourSlotFunction);
如果删除了 clicked 事件,对应的功能消失,说明该事件确实有绑定对应的槽函数,你应该再确认以下几点:
  • 在项目代码中搜索 connect 关键字,查找所有绑定的信号槽函数。
  • 检查删除事件前具体绑定的函数,并对照完整实现确保功能完备性。
  • 如果使用的是设计器工具生成的界面,确保对应的 UI 文件没有破损,并维护好自动生成的代码连接。


如需进一步帮助,请提供更多代码或错误信息详情。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-9 11:08:00 From FishC Mobile | 显示全部楼层
FishC 发表于 2025-2-8 22:20
回答:

第一个问题:

第一个问题,如果我找到了.lib文件 也查看了src.mk(里面包含了很多编译的动态库的地址)但是我找不到对应的地址来寻找我的.cpp文件
第二个问题,我全局搜索了绑定函数的名字,也搜索不到,但是我能搜索到connect关键字
在文件中找到dlopen #######################################文件说明########################################## #外层src.mk已包含公共的一些头文件、库文件、宏定义等,各个业务有特殊处理,请在此文件中定义,避免业务之间相互影响。 #机型、客户、编译信息等,在app/build/common/define中定义 #注意,此文件不可加入指定路径相关信息,行业有可能不是按照streamaxsdk搭建sdk资源目录 #LOCAL_DYNAMIC_LIBRARIES:链接的库 ######################################################################################### #####芯片定义 BUILD_HI3516DV300=C6D4.0 C6DAI C6D4.0S C6D4.1 C6D4.0S_2.0 C6E2.0 C6D4.2 C6DAI3.0 C6D4.0_2.0 C30M ADPRO C6D4.0_CSD BUILD_HI3521A=X5_AHD5.0 BUILD_NT9832X=X5N X3N X1N X5N_AI X3N_AI X1N_AI V3H0404 MDR608 X5NPRO H5_20 D6 VT5500_C NH6A X3NPRO BUILD_NT98316=X7N X7NPRO BUILD_CV25=944_VA BUILD_NT9852X=C6D5.0 C30MN AIBOX5.0 ADPRO2.0 ADPLUS ADPLUS2.0 C6LITE D50_VB 957_VB 951_VD ADLITE BUILD_NT9856X=C43 C47 BUILD_CV2=AIBOX6.0 BUILD_3521DV100=X7V3 BUILD_HORIZON_X3=C40A C40B #开源库路径变更必备链接 LOCAL_DYNAMIC_LIBRARIES+=-lcurl -lexpat -lavformat -lavcodec -lavutil -lswresample -lssl -lcrypto -lz ifeq (${SUPPORT_ALSA}, y) LOCAL_DYNAMIC_LIBRARIES += -lasound endif #动态库dlopen必备 LOCAL_DYNAMIC_LIBRARIES+=-ldl #是否开启数据加解密 BUILD_FUNC_DATASECURITY=M1N X1N X3N X5N X1N_AI X3N_AI X5N_AI X7N X5_AHD5.0 ADPLUS ADPLUS2.0 ADLITE ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_FUNC_DATASECURITY)), $(PRODUCT_TYPE)) LOCAL_DYNAMIC_LIBRARIES+= -lDataSecurity LOCAL_DYNAMIC_LIBRARIES+= -lmbedcrypto endif ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_HI3516DV300)), $(PRODUCT_TYPE)) LOCAL_DYNAMIC_LIBRARIES+=-lrmisp LOCAL_DYNAMIC_LIBRARIES+=-lsecurec #hisi LOCAL_DYNAMIC_LIBRARIES+=-lmpi -live -lnnie #######分类编译 BUILD_FUNC_FACE=C6D4.0 C6D4.0S C6D4.0S_2.0 C6D4.1 ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_FUNC_FACE)), $(PRODUCT_TYPE)) #face LOCAL_DYNAMIC_LIBRARIES+=-lrmai_taxi LOCAL_DYNAMIC_LIBRARIES+=-lcv_sys_api endif LOCAL_DYNAMIC_LIBRARIES+=-l_staewb #tts #LOCAL_DYNAMIC_LIBRARIES+=-lhci_curl -lhci_sys -lhci_tts -lhci_tts_local_synth endif ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_HI3521A)), $(PRODUCT_TYPE)) #LOCAL_DYNAMIC_LIBRARIES+=-lcurl #LOCAL_DYNAMIC_LIBRARIES+=-lhci_sys -lhci_tts -lhci_tts_local_synth endif ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_CV25)), $(PRODUCT_TYPE)) LOCAL_DYNAMIC_LIBRARIES+=-lasound -laudio -lfreetype -lsmartfb -lg7xx LOCAL_DYNAMIC_LIBRARIES+=-llua -lmcl -lnnctrl -lcavalry_mem -lvproc -l_data_process endif ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_NT9852X)), $(PRODUCT_TYPE)) #######编译TTS #LOCAL_DYNAMIC_LIBRARIES+=-lhci_curl -lhci_sys -lhci_tts -lhci_tts_local_synth #######分类编译ISP BUILD_FUNC_ISP=ADPRO2.0 C6D5.0 C30MN ADPLUS ADPLUS2.0 C6LITE D50_VB 957_VB 951_VD ADLITE ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_FUNC_ISP)), $(PRODUCT_TYPE)) LOCAL_DYNAMIC_LIBRARIES+=-lrmisp endif endif ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_NT98316)), $(PRODUCT_TYPE)) #LOCAL_DYNAMIC_LIBRARIES+= endif ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_NT9856X)), $(PRODUCT_TYPE)) #######分类编译ISP BUILD_FUNC_ISP=C43 C47 ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_FUNC_ISP)), $(PRODUCT_TYPE)) LOCAL_DYNAMIC_LIBRARIES+=-lrmisp endif endif ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_CV2)), $(PRODUCT_TYPE)) LOCAL_DYNAMIC_LIBRARIES+= -lg7xx -lasound -lmcl -llua -laudio endif ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_HORIZON_X3)), $(PRODUCT_TYPE)) LOCAL_DYNAMIC_LIBRARIES+=-ldl endif


以及src.mk文件
#该文件的编译规则和makefile一样,src.mk所在目录深度不能大于2,例如storage/src.mk、storage/xx/src.mk、storage/xx/xx/src.mk合法,storage/xx/xx/xx/src.mk不合法 #PRODUCT_TYPE(设备类型) #该文件的编译规则和makefile一样,src.mk所在目录深度不能大于2,例如storage/src.mk、storage/xx/src.mk、storage/xx/xx/src.mk合法,storage/xx/xx/xx/src.mk不合法 #PRODUCT_TYPE(设备类型) #使用gcc进行编译。有些在开源库基础上开发的代码使用g++进行编译会出现一大堆警告,默认使用g++进行编译,比如const char*和char*相互赋值 USE_GCC=n #add start CFLAGS+= -Wno-char-subscripts -rdynamic -ldl -Wno-error -w #1.定义当前路径 LOCAL_PATH=$(ROOT_DIR) RELEASER_DIR_PATH=$(LOCAL_PATH)/../.. #2.定义需要包含的头文件 LOCAL_INCLUDES+=-I${LOCAL_PATH} LOCAL_INCLUDES+=-I${LOCAL_PATH}/business LOCAL_INCLUDES+=-I${LOCAL_PATH}/business/basicfunctioncustomization LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/1448_include #以下头文件是基础GUI提供的头文件 LOCAL_INCLUDES+=-I${LOCAL_PATH} LOCAL_INCLUDES+=-I${LOCAL_PATH}/business LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libbasebusiness LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libbasebusiness/businessframe LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libbasebusiness/plugin LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libtelephone LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework/core LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework/core/backend LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework/core/builder LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework/core/canvas LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework/core/eventloop LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework/core/FontLibOpt LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework/core/general LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework/core/PicParser LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework/core/qrencode LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework/core/widget LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/streamaxsdk/include/gui/libframework/core/wmanager LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/1448_include LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/libcommon/filedataapi LOCAL_INCLUDES+=-I${RELEASER_DIR_PATH}/libcommon/msgdatamanage #3.定义需要包含的库文件路径 LOCAL_LDFLAGS+=-L${RMFS_LIB_DIR} LOCAL_LDFLAGS+=-L${RELEASER_DIR_PATH}/streamaxsdk/linux/${PRODUCT_TYPE}/lib #4.定义需要包含的静态库 LOCAL_STATIC_LIBRARIES+= #5.定义需要包含的动态库 LOCAL_DYNAMIC_LIBRARIES+=-ljpeg LOCAL_DYNAMIC_LIBRARIES+=-lqrencode LOCAL_DYNAMIC_LIBRARIES+=-lpthread LOCAL_DYNAMIC_LIBRARIES+=-ltinyxml2 LOCAL_DYNAMIC_LIBRARIES+=-ltinyxml LOCAL_DYNAMIC_LIBRARIES+=-lcairo LOCAL_DYNAMIC_LIBRARIES+=-lfontconfig LOCAL_DYNAMIC_LIBRARIES+=-lfreetype LOCAL_DYNAMIC_LIBRARIES+=-lpixman-1 LOCAL_DYNAMIC_LIBRARIES+=-lpng14 LOCAL_DYNAMIC_LIBRARIES+=-lstreamaxcbb LOCAL_DYNAMIC_LIBRARIES+=-lrmfs5.0 LOCAL_DYNAMIC_LIBRARIES+=-lappcommon LOCAL_DYNAMIC_LIBRARIES+=-ltelephoneapis LOCAL_DYNAMIC_LIBRARIES+=-lguiframework LOCAL_DYNAMIC_LIBRARIES+=-lguibasebusiness LOCAL_DYNAMIC_LIBRARIES+=-lrmbasicapi-streamaxsdk #6.定义需要宏定义 LOCAL_CFLAGS+= #7.定义需要的源文件路径,makefile会扫描以下路径的.c和.cpp文件进行编译 LOCAL_SRC_DIR+=${LOCAL_PATH} LOCAL_SRC_DIR+=${LOCAL_PATH}/setup LOCAL_SRC_DIR+=${LOCAL_PATH}/setup/alarm LOCAL_SRC_DIR+=${LOCAL_PATH}/setup/basic LOCAL_SRC_DIR+=${LOCAL_PATH}/setup/data LOCAL_SRC_DIR+=${LOCAL_PATH}/setup/video LOCAL_SRC_DIR+=${LOCAL_PATH}/setup/maintain LOCAL_SRC_DIR+=${LOCAL_PATH}/state LOCAL_SRC_DIR+=${LOCAL_PATH}/preview LOCAL_SRC_DIR+=${LOCAL_PATH}/log #8.如果不期望自动扫描目录,上面的路径可以不设,通过以下直接定义需要编译的文件 #LOCAL_SRC_FILE+= #9.本模块编译后的文件名称,当后缀为.a时编译为静态库,后缀为.so时编译为动态库,不加后缀为可执行文件 #GUI行业库名称指定 LOCAL_MODULE=guibus-1448.so
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-2-9 11:08:12 | 显示全部楼层
抹陳抹陳!! 发表于 2025-02-09 11:08
FishC 发表于 2025-2-8 22:20
回答:

第一个问题 ...


回答:

第一个问题:
你已经找到了 .lib 文件并查看了 src.mk 文件,但是没有找到 .cpp 文件。这是因为库文件通常是编译后的二进制文件,源码文件(.cpp)并不会与库文件一起发布。你可以尝试以下方法进一步确认:

1. **检查文档**:查看 SDK 文档或其他相关开发文档,看是否有说明源码位置或如何获取源码。
2. **联系供应商**:如果这是商用库,你可以尝试联系供应商或开发人员,询问他们是否提供源码或者更详细的技术支持。
3. **寻找预编译库**:在 src.mk 文件中查找包含库的路径,通过这些路径可以定位到库文件具体位置。例如:
LOCAL_DYNAMIC_LIBRARIES+=-lguiframework
   你可以查找相应路径下的库文件,例如 `libguiframework.so` 或 `libguiframework.a`,以确保这些库文件已正确包含并链接。

第二个问题:
你全局搜索了绑定函数的名字也搜索不到,但能找到 connect 关键字。这里可能有几种情况:

1. **自动生成代码**:某些开发工具(例如 Qt 的 UIC 工具)会根据 .ui 文件自动生成槽函数绑定代码。你可以查看生成的 .moc 文件或其他自动生成的代码文件,通常这些文件不会直接出现在项目目录中而是在构建目录中。

2. **宏定义和编译选项**:有时,信号槽连接通过宏定义或者特定编译设置进行绑定。你可以尝试搜索宏定义,例如 `SIGNAL` 和 `SLOT` 关键字。

3. **动态加载**:如果确实使用了 `dlopen` 或其他动态加载库的方法,信号槽绑定可能通过运行时加载实现。在这种情况下,你需要查找动态加载部分代码,例如:
void* handle = dlopen("yourlibrary.so", RTLD_LAZY);

4. **第三方库**:有可能这些事件是通过第三方库实现,通过引用相关库进行处理。在这种情况下,查看相关库文档或头文件有助于理解其用法。

如果你仍然无法定位到具体的问题,可以尝试提供更详细的代码片段或错误信息,以便得到更有针对性的帮助。

希望这些建议对你有所帮助!如有进一步问题,请随时提出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-9 11:13:56 From FishC Mobile | 显示全部楼层
FishC 发表于 2025-2-9 11:08
回答:

第一个问题:

第一个问题,那就算找到了库.so文件 那我想改.cpp里的代码那又怎么改?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-2-9 11:14:14 | 显示全部楼层
抹陳抹陳!! 发表于 2025-02-09 11:13
FishC 发表于 2025-2-9 11:08
回答:

第一个问题 ...


回答:

第一个问题:
找到库文件(如 .so 文件)后,如果你需要修改 .cpp 文件中的代码,但找不到源码,有以下几种解决方法:

1. **获取源码**:联系库的提供方,询问是否可以提供源码。如果是开源项目,可以到项目的官网或代码托管平台(如 GitHub)上查找源码。

2. **反编译**:在极端情况下,可以使用反编译工具来尝试恢复部分源码。然而,反编译得到的代码可能不完全准确并且难以理解,不建议作为主要方法。

3. **替换库**:如果无法获得源码并需要进行修改,可以考虑寻找功能相似的开源库进行替换。这样你可以自由修改和扩展。

4. **自定义实现**:如果上述方法都不可行,可以考虑基于现有头文件的接口,自行实现所需功能。查看头文件描述的接口函数,然后用自己的代码实现这些接口。

第二个问题:
对于 GUI 点击事件的绑定问题,如果你已经排除了常规查找方法,可以进一步检查以下内容:

1. **自动生成的代码**:检查是否有由工具自动生成的代码文件,例如 Qt 中的 moc 文件。

2. **动态加载与信号槽**:确认是否有使用 dlopen 动态加载库的代码。如果动态加载的库中包含 click 事件处理,可以尝试搜索 dlopen 加载的库中的相关符号。

3. **第三方库**:检查项目中是否使用了第三方 GUI 库,并查看其文档了解信号槽绑定方式。

请根据以上建议进行排查。如有进一步具体问题,请提供更多细节,以便更好地帮助你。

希望能对你有所帮助!如有其他问题,请随时提出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-10 11:04:39 From FishC Mobile | 显示全部楼层
FishC 发表于 2025-2-9 11:14
回答:

第一个问题:

我的src.mk文件 我删除了setup下的文件,然后设备上依旧还有主子码流的界面出现,而在setup下的界面以及功能都点不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-2-10 11:04:50 | 显示全部楼层
抹陳抹陳!! 发表于 2025-02-10 11:04
FishC 发表于 2025-2-9 11:14
回答:

第一个问题 ...


回答:

如果你删除了 `setup` 文件夹下的文件,设备上依旧显示主子码流的界面,这说明这些界面的定义和功能绑定可能是在其他地方实现或缓存的。以下是几点可能性及建议排查步骤:

1. **检查缓存**:
   - 确认设备是否有缓存机制,尝试重启设备或清除缓存,以确保最新的代码和配置被加载。

2. **其他文件依赖**:
   - 查看是否有其他文件(例如静态资源、配置文件)定义了这些界面。
   - 在你的项目目录中全局搜索相关界面的关键字,查看是否有其它地方引用到这些界面。

3. **编译和部署问题**:
   - 确认修改后的代码是否正确编译并部署到设备上。可能之前的旧版本仍然在设备上运行。
   - 确保你的构建流程包含了所有最新的源文件和正确的编译目标。

4. **动态加载库**:
   - 如果使用了动态加载库(如通过 `dlopen`),确保库文件也被正确更新并重新加载。
   
5. **确认信号槽连接**:
   - 检查是否有自动生成代码或其他文件中绑定了信号槽,该代码可能没有被更新。

6. **日志和调试**:
   - 使用日志和调试工具跟踪项目运行,检查是否有未处理的异常或错误信息。

请提供更多具体代码片段或详细信息,以便帮助进一步诊断和解决问题。

希望这些建议对你有所帮助!如有其他问题,请随时提出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-10 11:11:45 | 显示全部楼层
我在整个文件全局搜索了一下,只有在sdk包中搜索到dlopen

#######################################文件说明##########################################
#外层src.mk已包含公共的一些头文件、库文件、宏定义等,各个业务有特殊处理,请在此文件中定义,避免业务之间相互影响。
#机型、客户、编译信息等,在app/build/common/define中定义
#注意,此文件不可加入指定路径相关信息,行业有可能不是按照streamaxsdk搭建sdk资源目录
#LOCAL_DYNAMIC_LIBRARIES:链接的库
#########################################################################################

#####芯片定义
BUILD_HI3516DV300=C6D4.0 C6DAI C6D4.0S C6D4.1 C6D4.0S_2.0 C6E2.0 C6D4.2 C6DAI3.0 C6D4.0_2.0 C30M ADPRO C6D4.0_CSD
BUILD_HI3521A=X5_AHD5.0
BUILD_NT9832X=X5N  X3N  X1N  X5N_AI  X3N_AI  X1N_AI V3H0404 MDR608 X5NPRO H5_20 D6 VT5500_C NH6A X3NPRO
BUILD_NT98316=X7N X7NPRO
BUILD_CV25=944_VA
BUILD_NT9852X=C6D5.0 C30MN AIBOX5.0 ADPRO2.0 ADPLUS ADPLUS2.0 C6LITE D50_VB 957_VB 951_VD ADLITE
BUILD_NT9856X=C43 C47
BUILD_CV2=AIBOX6.0
BUILD_3521DV100=X7V3
BUILD_HORIZON_X3=C40A C40B

#开源库路径变更必备链接
LOCAL_DYNAMIC_LIBRARIES+=-lcurl -lexpat -lavformat -lavcodec -lavutil -lswresample -lssl -lcrypto -lz
ifeq (${SUPPORT_ALSA}, y)
LOCAL_DYNAMIC_LIBRARIES += -lasound
endif

#动态库dlopen必备
LOCAL_DYNAMIC_LIBRARIES+=-ldl

#是否开启数据加解密
BUILD_FUNC_DATASECURITY=M1N X1N X3N X5N X1N_AI X3N_AI X5N_AI X7N X5_AHD5.0 ADPLUS ADPLUS2.0 ADLITE
ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_FUNC_DATASECURITY)), $(PRODUCT_TYPE))
        LOCAL_DYNAMIC_LIBRARIES+= -lDataSecurity
        LOCAL_DYNAMIC_LIBRARIES+= -lmbedcrypto
endif

ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_HI3516DV300)), $(PRODUCT_TYPE))
       
        LOCAL_DYNAMIC_LIBRARIES+=-lrmisp
        LOCAL_DYNAMIC_LIBRARIES+=-lsecurec
#hisi
        LOCAL_DYNAMIC_LIBRARIES+=-lmpi -live -lnnie
       
        #######分类编译
        BUILD_FUNC_FACE=C6D4.0 C6D4.0S C6D4.0S_2.0 C6D4.1
        ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_FUNC_FACE)), $(PRODUCT_TYPE))
                #face
                LOCAL_DYNAMIC_LIBRARIES+=-lrmai_taxi
                LOCAL_DYNAMIC_LIBRARIES+=-lcv_sys_api
        endif

        LOCAL_DYNAMIC_LIBRARIES+=-l_staewb
#tts
        #LOCAL_DYNAMIC_LIBRARIES+=-lhci_curl -lhci_sys -lhci_tts -lhci_tts_local_synth
endif

ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_HI3521A)), $(PRODUCT_TYPE))
        #LOCAL_DYNAMIC_LIBRARIES+=-lcurl
        #LOCAL_DYNAMIC_LIBRARIES+=-lhci_sys -lhci_tts -lhci_tts_local_synth
endif

ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_CV25)), $(PRODUCT_TYPE))
        LOCAL_DYNAMIC_LIBRARIES+=-lasound -laudio -lfreetype -lsmartfb -lg7xx
        LOCAL_DYNAMIC_LIBRARIES+=-llua -lmcl -lnnctrl -lcavalry_mem -lvproc -l_data_process
endif

ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_NT9852X)), $(PRODUCT_TYPE))
        #######编译TTS
        #LOCAL_DYNAMIC_LIBRARIES+=-lhci_curl -lhci_sys -lhci_tts -lhci_tts_local_synth
       
        #######分类编译ISP
        BUILD_FUNC_ISP=ADPRO2.0 C6D5.0 C30MN ADPLUS ADPLUS2.0 C6LITE D50_VB 957_VB 951_VD ADLITE
        ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_FUNC_ISP)), $(PRODUCT_TYPE))
                LOCAL_DYNAMIC_LIBRARIES+=-lrmisp
        endif
endif

ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_NT98316)), $(PRODUCT_TYPE))
        #LOCAL_DYNAMIC_LIBRARIES+=
endif

ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_NT9856X)), $(PRODUCT_TYPE))
        #######分类编译ISP
        BUILD_FUNC_ISP=C43 C47
        ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_FUNC_ISP)), $(PRODUCT_TYPE))
                LOCAL_DYNAMIC_LIBRARIES+=-lrmisp
        endif
endif

ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_CV2)), $(PRODUCT_TYPE))
        LOCAL_DYNAMIC_LIBRARIES+= -lg7xx -lasound -lmcl -llua -laudio
endif

ifeq ($(filter $(PRODUCT_TYPE), $(BUILD_HORIZON_X3)), $(PRODUCT_TYPE))
        LOCAL_DYNAMIC_LIBRARIES+=-ldl        
endif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-2-10 11:11:53 | 显示全部楼层
抹陳抹陳!! 发表于 2025-02-10 11:11
我在整个文件全局搜索了一下,只有在sdk包中搜索到dlo ...


回答:

从你提供的 `src.mk` 文件内容来看,确实有一些库是通过 `dlopen` 动态加载的。

如果你的代码中使用了 `dlopen` 来加载动态库,并且你需要找到和修改 `.cpp` 文件,但目前只有 .so 文件,可以尝试以下几种方法:

1. **查看文档和注释**:SDK 和相关库的文档往往会提到如何使用以及源码所在位置。如果有的话,仔细阅读文档和注释可能会有所帮助。

2. **联系供应商或开发团队**:如果这些库是第三方提供的(例如商用库),可以尝试联系供应商获取相应的源码或者请求技术支持。

3. **开源软件平台**:如果这些库涉及到开源项目,可以尝试在 GitHub 等平台上搜寻该项目的源码。通常开源项目会在其主页提供源码仓库的网址。

4. **反编译**:这是最不推荐的方法,但出于极端情况,你可以使用工具对 `.so` 文件进行反编译以了解函数实现,但这仅供参考,并且很难恢复到可读性较高的源码。

5. **找到替代库**:如果无法获取原库的源码,可以考虑寻找功能相似的开源库并替换之,然后根据自己的需求进行修改。

关于 `dlopen`,通常情况下,动态加载库的代码可能类似如下:
void* handle = dlopen("libmylibrary.so", RTLD_LAZY);
if (!handle) {
    fprintf(stderr, "%s\n", dlerror());
    exit(EXIT_FAILURE);
}
如果你要找到具体调用 `dlopen` 的地方,可以进一步在项目中搜索所有 `dlopen` 调用,这可能会帮助你更好地理解库是如何被加载和使用的。

此外,对于你提到的删除 `setup` 文件夹下文件后设备依旧显示主子码流界面的问题:
- **缓存问题**:请确保设备已经清除缓存,并重新启动设备,以确保最新的代码生效。
- **其他配置文件**:检查是否有其他配置文件或脚本定义了这些界面。全局搜索关键词,确认代码和配置文件没有遗漏。
- **自动生成代码**:如果有自动生成代码机制,确保这部分代码也被正确更新和重新生成。

希望以上信息能够对你有所帮助!如需要更具体的指导或有其他疑问,请继续提供详细信息。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-10 11:13:48 | 显示全部楼层
我现在就想知道它的主子码流的代码是在哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-2-10 11:14:01 | 显示全部楼层
抹陳抹陳!! 发表于 2025-02-10 11:13
我现在就想知道它的主子码流的代码是在哪里


要找到主子码流的代码,你可以进行以下几步详细排查:

1. **全局搜索关键字**:在整个项目中搜索与主子码流相关的关键字,例如 `stream`、`main stream`、`sub stream` 等。这些关键词可能出现在变量名、函数名或者注释中。

2. **检查头文件**:头文件(`.h`)通常包含了函数声明和类定义。你可以搜索一些常见的头文件,查看它们是否包含主子码流的定义或接口声明。

3. **动态库加载**:既然你提到有使用 `dlopen`,搜索这部分代码看看哪些共享库被加载,特别是那些涉及流媒体处理的库。

4. **配置文件**:一些关键配置(如主子码流)可能在外部配置文件中设置。检查配置文件(如 `.xml`、`.json` 等)中的相关配置项。

5. **调试日志**:通过添加调试日志(例如 `printf`、`std::cout` 等)来确认代码执行的路径,并定位涉及主子码流的代码段。

6. **参考示例代码**:如果 SDK 附带示例代码或文档,查看这些示例如何处理流媒体功能,有助于你快速找到相关实现。

以下是一些示例搜索和检查步骤:

### 全局搜索关键字
在项目根目录下使用以下命令(假设你使用的是 Linux 环境):
grep -rnw . -e 'stream'
这个命令会递归搜索目录中的所有文件,寻找包含字符串 `stream` 的行,并输出行号信息。

### 检查相关代码片段
如果找到一个可疑文件或代码段,仔细检查其实现,例如:
// 假设这是一个流媒体设置的代码片段
void setupStreaming() {
    // 设置主码流
    configureMainStream();
    // 设置子码流
    configureSubStream();
}
### 检查头文件
查看头文件中的定义和声明,例如:
// In streaming.h
void configureMainStream();
void configureSubStream();

### 动态库加载示例
如果发现 `dlopen` 调用,检查加载的库文件和函数指针绑定:
// 动态加载库示例
void* handle = dlopen("libstream.so", RTLD_LAZY);
if (!handle) {
    fprintf(stderr, "Failed to load libstream: %s\n", dlerror());
    return;
}

// 获取函数地址
typedef void (*configureStreamFunc)();
configureStreamFunc configMainStream = (configureStreamFunc)dlsym(handle, "configureMainStream");
configureStreamFunc configSubStream = (configureStreamFunc)dlsym(handle, "configureSubStream");

// 调用函数
if (configMainStream) configMainStream();
if (configSubStream) configSubStream();

### 检查配置文件
查看项目中的配置文件,若发现与流媒体相关的配置项(例如 XML),例如:
<!-- 在 configuration.xml 中 -->
<stream>
    <mainStream>...</mainStream>
    <subStream>...</subStream>
</stream>

### 使用调试工具
运行程序并使用调试工具(如 gdb 或 lldb),打断点并跟踪执行路径,查看哪些函数被调用并与主子码流相关。

希望以上方法能帮助你定位到主子码流的相关代码。如需进一步帮助,请提供更多具体的信息,例如代码片段或错误日志。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-19 14:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表