- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 Qt Creator,我创建了我自己的个人共享库,我目前正在从事的项目中使用它。我想要做的是将 .so/.dll 文件放在我在 .pro 文件中使用以下代码的应用程序的 lib/ 文件夹中:
LIBS += -L$$PWD/lib/
win32 {
SHARED_LIB_FILES = $$files($$PWD/lib/*.dll)
for(FILE, SHARED_LIB_FILES) {
BASENAME = $$basename(FILE)
LIBS += -l$$replace(BASENAME,\.dll,)
}
}
unix {
SHARED_LIB_FILES = $$files($$_PRO_FILE_PWD_/lib/*.so)
for(FILE, SHARED_LIB_FILES) {
BASENAME = $$basename(FILE)
LIBS += -l$$replace(BASENAME,\.so,)
}
}
但是当我构建项目时,对于从库文件中使用的函数,我得到以下错误:
Undefined reference to 'Class::function()'
如何动态包含 lib/ 文件夹中的库文件而不会遇到上述错误?
更新
编译器输出:
09:56:53: Running steps for project PocketList...
09:56:53: Configuration unchanged, skipping qmake step.
09:56:53: Starting: "/usr/bin/make"
g++ -m64 -Wl,-O1 -o PocketList main.o combotonselect.o ComListaCodigos.o ComEditor.o ComRecordatorio.o ComControlador.o Aplicacion.o ComNota.o ComElidedLabel.o ComDashPad.o AppRecordatorios.o AppCodigos.o ComVinchero.o AppVincheros.o Mod.o AppDashboard.o ComLogger.o ComLlave.o ComListaNotas.o AppNotas.o VentanaPrincipal.o AppConvertidorMetrico.o qrc_res.o moc_combotonselect.o moc_ComListaCodigos.o moc_ComEditor.o moc_ComRecordatorio.o moc_ComControlador.o moc_Aplicacion.o moc_ComNota.o moc_ComElidedLabel.o moc_ComResizeImageDialog.o moc_ComDashPad.o moc_AppRecordatorios.o moc_Control.o moc_AppCodigos.o moc_ComVinchero.o moc_AppVincheros.o moc_Mod.o moc_ObservadorVincheros.o moc_AppDashboard.o moc_ObservadorCuota.o moc_ObservadorConexion.o moc_ComLogger.o moc_ComLlave.o moc_ComListaNotas.o moc_AppNotas.o moc_VentanaPrincipal.o moc_AppConvertidorMetrico.o moc_WorkerObservadorVincheros.o moc_WorkerObservadorCuota.o moc_WorkerObservadorConexion.o -L/usr/X11R6/lib64 -L/media/omari/EXT/Programación/Qt\ Creator/PocketList/lib/ -lQt5Multimedia -lQt5Widgets -lQt5Gui -lQt5Network -lQt5Core -lGL -lpthread
main.o: En la función `ConvertidorMetrico::cargar()':
main.cpp:(.text._ZN18ConvertidorMetrico6cargarEv[_ZN18ConvertidorMetrico6cargarEv]+0x9b0): referencia a `Controlador::leerFichero(QString)' sin definir
main.cpp:(.text._ZN18ConvertidorMetrico6cargarEv[_ZN18ConvertidorMetrico6cargarEv]+0xa49): referencia a `Controlador::split(QString, QString)' sin definir
main.cpp:(.text._ZN18ConvertidorMetrico6cargarEv[_ZN18ConvertidorMetrico6cargarEv]+0xda1): referencia a `Controlador::split(QString, QString)' sin definir
main.cpp:(.text._ZN18ConvertidorMetrico6cargarEv[_ZN18ConvertidorMetrico6cargarEv]+0xf0b): referencia a `Controlador::split(QString, QString)' sin definir
Makefile:292: fallo en las instrucciones para el objetivo 'PocketList'
main.cpp:(.text._ZN18ConvertidorMetrico6cargarEv[_ZN18ConvertidorMetrico6cargarEv]+0x1100): referencia a `Controlador::split(QString, QString)' sin definir
AppRecordatorios.o: En la función `AppRecordatorios::guardar()':
AppRecordatorios.cpp:(.text+0x21b3): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
AppRecordatorios.o: En la función `AppRecordatorios::cargarDatos()':
AppRecordatorios.cpp:(.text+0x2ea1): referencia a `Controlador::leerFichero(QString)' sin definir
AppRecordatorios.cpp:(.text+0x3297): referencia a `Controlador::split(QString, QString)' sin definir
AppCodigos.o: En la función `AppCodigos::actualizarCodigos()':
AppCodigos.cpp:(.text+0xecf): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
AppCodigos.cpp:(.text+0x124b): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
AppCodigos.o: En la función `AppCodigos::cargarDatos()':
AppCodigos.cpp:(.text+0x16be): referencia a `Controlador::esDirExistente(QString)' sin definir
AppCodigos.cpp:(.text+0x1919): referencia a `Controlador::leerFichero(QString)' sin definir
AppCodigos.cpp:(.text+0x1c6a): referencia a `Controlador::leerFichero(QString)' sin definir
AppCodigos.cpp:(.text+0x1e42): referencia a `Controlador::crearDirectorio(QString)' sin definir
AppCodigos.o: En la función `AppCodigos::eliminarCodigo()':
AppCodigos.cpp:(.text+0x2ef7): referencia a `Controlador::eliminarArchivo(QString)' sin definir
AppCodigos.o: En la función `AppCodigos::addCodigo()':
AppCodigos.cpp:(.text+0x3214): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
AppVincheros.o: En la función `AppVincheros::guardar()':
AppVincheros.cpp:(.text+0x1709): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
AppVincheros.o: En la función `AppVincheros::getCantidadVinchero(QString, QString)':
AppVincheros.cpp:(.text+0x1e02): referencia a `Controlador::getVinculosURL(QString)' sin definir
AppVincheros.o: En la función `AppVincheros::addVinchero()':
AppVincheros.cpp:(.text+0x3e4c): referencia a `Controlador::esUrlValido(QString)' sin definir
AppVincheros.cpp:(.text+0x3f14): referencia a `Controlador::leerURL(QString)' sin definir
AppVincheros.o: En la función `AppVincheros::actualizarVinchero()':
AppVincheros.cpp:(.text+0x4744): referencia a `Controlador::esUrlValido(QString)' sin definir
AppVincheros.cpp:(.text+0x479b): referencia a `Controlador::leerURL(QString)' sin definir
AppVincheros.o: En la función `AppVincheros::cargarDatos()':
AppVincheros.cpp:(.text+0x4ee0): referencia a `Controlador::leerFichero(QString)' sin definir
AppDashboard.o: En la función `AppDashboard::configurarObservadorConexion()':
AppDashboard.cpp:(.text+0x328f): referencia a `Controlador::existeFichero(QString)' sin definir
AppDashboard.cpp:(.text+0x3315): referencia a `Controlador::leerFichero(QString)' sin definir
AppDashboard.o: En la función `AppDashboard::actualizarCuotaObservada()':
AppDashboard.cpp:(.text+0x432f): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
AppDashboard.cpp:(.text+0x4f1e): referencia a `Controlador::eliminarArchivo(QString)' sin definir
AppDashboard.o: En la función `AppDashboard::solicitarCuota(bool)':
AppDashboard.cpp:(.text+0x5a9a): referencia a `Controlador::hayConexion()' sin definir
AppDashboard.o: En la función `AppDashboard::configurarObservadorCuota()':
AppDashboard.cpp:(.text+0x6747): referencia a `Controlador::existeFichero(QString)' sin definir
AppDashboard.cpp:(.text+0x67cc): referencia a `Controlador::leerFichero(QString)' sin definir
AppDashboard.o: En la función `AppDashboard::actualizarCuotaObservada(Control::Cuota*)':
AppDashboard.cpp:(.text+0x7d6a): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
AppDashboard.o: En la función `AppDashboard::setProxyConexion()':
AppDashboard.cpp:(.text+0x8c03): referencia a `Controlador::eliminarArchivo(QString)' sin definir
AppDashboard.cpp:(.text+0x921b): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
AppDashboard.o: En la función `Control::getCuota(QString)':
AppDashboard.cpp:(.text._ZN7Control8getCuotaE7QString[_ZN7Control8getCuotaE7QString]+0xc2): referencia a `Controlador::leerURL(QString)' sin definir
ComLlave.o: En la función `ComLlave::autenticar()':
ComLlave.cpp:(.text+0x10e8): referencia a `Controlador::cifrarContrasenna(QString)' sin definir
ComLlave.o: En la función `ComLlave::cargarDatos()':
ComLlave.cpp:(.text+0x154b): referencia a `Controlador::leerFichero(QString)' sin definir
ComLlave.o: En la función `ComLlave::cambiarContrasenna()':
ComLlave.cpp:(.text+0x3392): referencia a `Controlador::cifrarContrasenna(QString)' sin definir
ComLlave.cpp:(.text+0x371a): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
ComLlave.cpp:(.text+0x3a3c): referencia a `Controlador::cifrarContrasenna(QString)' sin definir
ComLlave.cpp:(.text+0x3ca0): referencia a `Controlador::leerFichero(QString)' sin definir
AppNotas.o: En la función `AppNotas::guardar()':
AppNotas.cpp:(.text+0x11f2): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
AppNotas.cpp:(.text+0x1b73): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
AppNotas.o: En la función `AppNotas::cargarDatos()':
AppNotas.cpp:(.text+0x217f): referencia a `Controlador::esDirExistente(QString)' sin definir
AppNotas.cpp:(.text+0x21dc): referencia a `Controlador::crearDirectorio(QString)' sin definir
AppNotas.cpp:(.text+0x25bd): referencia a `Controlador::leerFichero(QString)' sin definir
AppNotas.cpp:(.text+0x2cb9): referencia a `Controlador::leerFichero(QString)' sin definir
AppNotas.o: En la función `AppNotas::eliminarCuaderno()':
AppNotas.cpp:(.text+0x48b9): referencia a `Controlador::eliminarArchivo(QString)' sin definir
AppNotas.o: En la función `AppNotas::eliminarNota()':
AppNotas.cpp:(.text+0x4b34): referencia a `Controlador::eliminarArchivo(QString)' sin definir
AppNotas.o: En la función `AppNotas::addNota()':
AppNotas.cpp:(.text+0x53e7): referencia a `Controlador::escribirFichero(QString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' sin definir
VentanaPrincipal.o: En la función `VentanaPrincipal::VentanaPrincipal(QWidget*)':
VentanaPrincipal.cpp:(.text+0x1015): referencia a `Controlador::esDirExistente(QString)' sin definir
VentanaPrincipal.cpp:(.text+0x15c7): referencia a `Controlador::crearDirectorio(QString)' sin definir
AppConvertidorMetrico.o: En la función `AppConvertidorMetrico::convertir(QString)':
AppConvertidorMetrico.cpp:(.text+0x3492): referencia a `te_interp' sin definir
AppConvertidorMetrico.cpp:(.text+0x3826): referencia a `te_interp' sin definir
moc_ObservadorVincheros.o: En la función `ObservadorVincheros::run()':
moc_ObservadorVincheros.cpp:(.text._ZN19ObservadorVincheros3runEv[_ZN19ObservadorVincheros3runEv]+0x28): referencia a `Controlador::hayConexion()' sin definir
moc_ObservadorVincheros.cpp:(.text._ZN19ObservadorVincheros3runEv[_ZN19ObservadorVincheros3runEv]+0x2fe): referencia a `Controlador::leerURL(QString)' sin definir
moc_ObservadorVincheros.cpp:(.text._ZN19ObservadorVincheros3runEv[_ZN19ObservadorVincheros3runEv]+0x5f7): referencia a `Controlador::getVinculosURL(QString)' sin definir
moc_WorkerObservadorVincheros.o: En la función `WorkerObservadorVincheros::process()':
moc_WorkerObservadorVincheros.cpp:(.text._ZN25WorkerObservadorVincheros7processEv[_ZN25WorkerObservadorVincheros7processEv]+0x28): referencia a `Controlador::hayConexion()' sin definir
moc_WorkerObservadorVincheros.cpp:(.text._ZN25WorkerObservadorVincheros7processEv[_ZN25WorkerObservadorVincheros7processEv]+0x2fe): referencia a `Controlador::leerURL(QString)' sin definir
moc_WorkerObservadorVincheros.cpp:(.text._ZN25WorkerObservadorVincheros7processEv[_ZN25WorkerObservadorVincheros7processEv]+0x5f7): referencia a `Controlador::getVinculosURL(QString)' sin definir
collect2: error: ld returned 1 exit status
make: *** [PocketList] Error 1
09:56:54: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project PocketList (kit: Linux)
The kit Linux has configuration issues which might be the root cause for this problem.
When executing step "Make"
09:56:54: Elapsed time: 00:01.
最佳答案
您在 LIBS 中包含了 lib(来自库文件名)。试试这个:
BASENAME = $$basename(FILE)
LIBNAME = $$replace(BASENAME, lib, )
LIBS += -l$$replace(LIBNAME,\.so,)
至少对于 unix,惯例是省略库文件名的 lib 前缀(例如 libname.so => -lname)
更新,基于您发布的编译输出:
查看以g++开头的行,你成功地为链接器提供了lib目录
-L/media/omari/EXT/Programación/Qt\ Creator/PocketList/lib/
但未能通过库,因为我看到的只有那些:
-lQt5Multimedia
-lQt5Widgets
-lQt5Gui
-lQt5Network
-lQt5Core
-lGL
-lpthread
检查目录是否正确,并且包含所需的文件。此外,在您的 pro 文件中使用 message()
函数来调试它。例如:
message( LIBNAME )
关于c++ - Qt C++ : Include all library files in project folder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47391853/
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicates: what is the difference between #include and #include “fi
我想使用 #include 指令,其文件名作为外部定义的宏传递。 例如 #include #FILE".h" 其中 FILE 将被定义为字符串 MyFile(不带引号),结果为 #include "M
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我想在当前目录及其子目录下的每个 .m 文件中查找所有出现 ncread 的情况。我使用以下命令: grep -R --include="\.m" ncread . 但是该命令没有返回任何内容。 gr
有时我会遇到这样的情况,我发现我需要为大型第三方文件制作一个#include,这样我才能使用一个函数或一个小类,这让我感到内疚,因为我知道这已经消失了增加我的编译时间,因为当我只想要一个功能时它会编译
这个问题在这里已经有了答案: 关闭13年前. Possible Duplicate: what is the difference between #include and #include “fi
我正在尝试通过应用程序加载器提交应用程序。我收到这个错误。但我已经检查了build设置,所有三种架构都包含在有效架构设置中。 最佳答案 断开任何设备,只保留“iOS 设备”中的选项并将其存档。 关于i
Please check this demo plunker更好地理解我的问题。 在我的主页上有一个表格。每个表行后面都有一个最初隐藏的空行。单击第一行时,我使用指令在其下方的空行中注入(inject
我正在使用 mkdocs 创建 html 网页和片段扩展以将我的主文档分成小块。我有一个难以理解的错误: 在我制作的文件file1.md中: --8<-- includes/some_rep/frag
include的推荐方式是什么?您项目的所有文件? 我见过很多使用类似结构的例子: include 的有序列表单个顶级文件(定义 Module 的文件,或应用程序中的“主”文件)中的语句。 这似乎也是
我想知道如何使用 fx:include与 JavaFX Scene Builder 结合使用,因此: 想象我有一个 BorderPane (文件 borderpane.fxml)。在中间部分我想放一个
我看到 Fortran 有“调用”和“包含”语句。两者有什么区别? .i 文件类型有什么意义吗? 即: include 'somefile.i' call 'somesubroutine.f' 谢谢!
这很挑剔,可能没有任何实际用途。我只是好奇... 在 C++20 工作草案 (n4861) 中, header 名称定义为: (5.8) header-name: " q-char-
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: What is the difference between #include and #include “fil
我有一个非常庞大且臃肿的类,我想将它拆分成单独的文件,但它应该对用户完全透明并且与使用该类的现有项目兼容。 特别是,我有自己的 ImageMatrix 类,它定义了大量的一元函数、大量带有标量的二元函
我是 grep 的新手,在重构 C 和 C++ 文件的过程中,我遇到了替换系统的问题,包括 #include <>与本地包括 #include "" . 有没有一种方法可以将 grep 与任何替代工具
我正在制作一个 Spring MVC web 项目,我必须有一个常量 header 。 我的基本要求是“我们希望在所有屏幕上都有一个标题,以显示谁登录了 ProjectA。” 我从这里“What is
在 SWIG 中,“%include”指令与标准 C“#include”有什么区别? 例如,在所有教程中,为什么它们通常看起来像这样: %module my_module %{ #include "M
假设我们有这个头文件: MyClass.hpp #pragma once #include class MyClass { public: MyClass(double); /* .
我已经在一个项目上工作了一段时间,该项目实现了一个使用 C 库的自定义框架。该框架是用 Swift 编写的,我创建了一个模块来向 Swift 公开 C 头文件。该框架是在不同的项目中启动的,然后将该框
我是一名优秀的程序员,十分优秀!