- 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/
我想知道是否可以访问放在 tomcat 的 conf 文件夹中的文件。通常我会在这个文件中放置多个 webapp 的配置,在 war 之外。 我想使用类路径独立于文件系统。 我过去使用过 lib 文件
我有一个 PowerShell 脚本,它获取文件列表并移动满足特定条件的文件。为什么即使对象为空,foreach 循环也会运行? 我假设如果 $i 不存在,它就不会运行。但是如果 $filePath
我已将 BasicAccountRule.drl 放置在我的 Web 应用程序中,位置为:C:/workspace/exim_design/src/main/resources/rules/drl/i
我使用 File.open('file.txt').class 和 File.open('file.txt').readlines.class 以及前者进行了检查一个返回 File,后者返回 Arra
我正在尝试使用 FileOutputStream 删除文件,在其中写入内容后。这是我用来编写的代码: private void writeContent(File file, String fileC
我正在尝试使用 flink 和 python 批处理 api 测试 Wordcount 经典示例。我的问题是,将数据源从 env.from_elements() 修改为 env.read_text()
我正在尝试制作一个可以同时处理多个不同文件的程序。我的想法是制作一个包含 20 个 FILE* 的数组,以便在我达到此限制时能够关闭其中一个并打开请求的新文件。 为此,我想到了一个函数,它选择一个选项
我有两个文件A和B文件A: 976464 792992 文件B TimeStamp,Record1,976464,8383,ABCD 我想搜索文件 A 和文件 B 中的每条记录并打印匹配的记录。打印的
我有一些保存在 map 中的属性文件。示例: Map map = new HashMap<>(); map.put("1", "One"); map.put("2", "Two"); map.put(
我正在尝试找出一个脚本文件,该文件接受一个包含文件列表的文件(每一行都是一个文件路径,即 path/to/file)并将它们合并到一个文件中。 例如: list.text -- path/to/fil
为了使用 File.CreateText() 和 File.AppendText() 你必须: 通过调用这些方法之一打开流 写消息 关闭流 处理流 为了使用 File.AppendAllText()
使用rsync时,如何在使用--files-from参数复制时重命名文件?我有大约190,000个文件,在从源复制到目标时,每个文件都需要重命名。我计划将文件列表放在一个文本文件中传递给--files
我在非服务器应用程序中使用 Spring(只需从 Eclipse 中某个类的 main() 编译并运行它)。 我的问题是作为 new FileSystemXmlApplicationContext 的
QNX (Neutrino 6.5.0) 使用 ksh 的开源实现作为其 shell 。许多提供的脚本,包括系统启动脚本,都使用诸如 if ! test /dev/slog -ef /dev/slog
当我尝试打开从我的应用程序下载的 xls 文件时,出现此错误: excel cannot open the file because the file format or file extension
有一些相关的概念,即文件指针、流和文件描述符。 我知道文件指针是指向数据类型 FILE 的指针(在例如 FILE.h 和 struct_FILE.h 中声明)。 我知道文件描述符是 int ,例如成员
好吧,这应该很容易... 我是groovy的新手,我希望实现以下逻辑: def testFiles = findAllTestFiles(); 到目前为止,我想出了下面的代码,该代码可以成功打印所有文
我理解为什么以下内容会截断文件的内容: Get-Content | Out-File 这是因为 Out-File 首先运行,它会在 Get-Content 有机会读取文件之前清空文件。 但是当我尝
您好,我正在尝试将文件位置表示为变量,因为最终脚本将在另一台机器上运行。这是我尝试过的代码,然后是我得到的错误。在我看来,python 是如何添加“\”的,这就是导致问题的原因。如果是这种情况,我如何
我有一个只包含一行的输入文件: $ cat input foo bar 我想在我的脚本中使用这一行,据我所知有 3 种方法: line=$(cat input) line=$( input"...,
我是一名优秀的程序员,十分优秀!