Моя среда - Rocky Linux 9, под WSL2. Это означает, что последнее квазип, к которому я имею доступ, является 1.2 < /p>
Я пытаюсь сделать супер базовый пример, просто превращая папку в zip -файл. Тем не менее, я не могу скомпилировать его, потому что по какой -то причине мои призывы к Quazipfile :: open () не распознаются. Я могу открыть заголовок и увидеть его прямо там , так что я не уверен, в чем заключается проблема:
#include
#include
#include
#include
#include
#include
#include
#include
void MainWindow::myFunc() {
QuaZip zip("C:\\Users\\tyler.shellberg\\Downloads\\workingdir\\materials.zip");
if (!zip.open(QuaZip::mdCreate))
{
// Handle error: could not create zip file
return;
}
QString sourceFolderPath = "C:\\Users\\tyler.shellberg\\Downloads\\workingdir\\materials";
QDirIterator it(sourceFolderPath,
QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot,
QDirIterator::Subdirectories);
while (it.hasNext())
{
it.next();
QFileInfo fileInfo = it.fileInfo();
QString relativePath =
QDir(sourceFolderPath).relativeFilePath(fileInfo.absoluteFilePath());
if (fileInfo.isFile())
{
QuaZipFile zipFile(&zip);
QuaZipNewInfo newInfo(relativePath);
if (!zipFile.open(QIODevice::WriteOnly, newInfo))
{
// Handle error: could not open entry in zip
continue;
}
QFile sourceFile(fileInfo.absoluteFilePath());
if (sourceFile.open(QIODevice::ReadOnly))
{
zipFile.write(sourceFile.readAll());
sourceFile.close();
}
else
{
// Handle error: could not open source file
}
zipFile.close();
}
else if (fileInfo.isDir())
{
// Add directory entry (optional, but good for structure)
QuaZipFile zipFile(&zip);
// Add trailing slash for directory
QuaZipNewInfo newInfo(relativePath + "/");
if (!zipFile.open(QIODevice::WriteOnly, newInfo))
{
// Handle error
}
zipFile.close();
}
}
zip.close();
}
< /code>
Когда я смотрю в заголовок, Quazipfile :: open (), принимая в открытую моду, и Quazipnewinfo явно прямо здесь! (Остальные аргументы являются необязательными) < /p>
bool open(OpenMode mode, const QuaZipNewInfo& info,
const char *password =nullptr, quint32 crc =0,
int method =Z_DEFLATED, int level =Z_DEFAULT_COMPRESSION, bool raw =false,
int windowBits =-MAX_WBITS, int memLevel =DEF_MEM_LEVEL, int strategy =Z_DEFAULT_STRATEGY);
< /code>
Попытка компилировать, я получаю: < /p>
undefined reference to `QuaZipFile::open(QFlags, QuaZipNewInfo const&, char const*, unsigned int, int, int, bool, int, int, int)'
collect2: error: ld returned 1 exit status
< /code>
Если я прокомментирую два вызова Open (), остальные могут скомпилировать просто хорошо. (Приведено в соответствующем заголовке, он выполняет Q_DECLARE_FLAGS (OPENMODE, OPENMODEFLAG)
), если нет, я понятия не имею, откуда он будет.find_package(QuaZip5 REQUIRED)
< /code>
и < /p>
target_link_libraries(${EXECUTABLE_NAME} PRIVATE quazip1-qt5)
target_include_directories(${EXECUTABLE_NAME} PRIVATE ${QUAZIP_INCLUDE_DIRS})
Моя среда - Rocky Linux 9, под WSL2. Это означает, что последнее квазип, к которому я имею доступ, является 1.2 < /p> Я пытаюсь сделать супер базовый пример, просто превращая папку в zip -файл. Тем не менее, я не могу скомпилировать его, потому что по какой -то причине мои призывы к Quazipfile :: open () не распознаются. Я могу открыть заголовок и увидеть его прямо там , так что я не уверен, в чем заключается проблема: [code]#include #include #include #include #include
if (fileInfo.isFile()) { QuaZipFile zipFile(&zip); QuaZipNewInfo newInfo(relativePath);
if (!zipFile.open(QIODevice::WriteOnly, newInfo)) { // Handle error: could not open entry in zip continue; }
QFile sourceFile(fileInfo.absoluteFilePath()); if (sourceFile.open(QIODevice::ReadOnly)) { zipFile.write(sourceFile.readAll()); sourceFile.close(); } else { // Handle error: could not open source file } zipFile.close(); } else if (fileInfo.isDir()) { // Add directory entry (optional, but good for structure) QuaZipFile zipFile(&zip); // Add trailing slash for directory QuaZipNewInfo newInfo(relativePath + "/"); if (!zipFile.open(QIODevice::WriteOnly, newInfo)) { // Handle error } zipFile.close(); } } zip.close(); } < /code> Когда я смотрю в заголовок, Quazipfile :: open (), принимая в открытую моду, и Quazipnewinfo явно прямо здесь! (Остальные аргументы являются необязательными) < /p> bool open(OpenMode mode, const QuaZipNewInfo& info, const char *password =nullptr, quint32 crc =0, int method =Z_DEFLATED, int level =Z_DEFAULT_COMPRESSION, bool raw =false, int windowBits =-MAX_WBITS, int memLevel =DEF_MEM_LEVEL, int strategy =Z_DEFAULT_STRATEGY); < /code> Попытка компилировать, я получаю: < /p> undefined reference to `QuaZipFile::open(QFlags, QuaZipNewInfo const&, char const*, unsigned int, int, int, bool, int, int, int)' collect2: error: ld returned 1 exit status < /code> Если я прокомментирую два вызова Open (), остальные могут скомпилировать просто хорошо. (Приведено в соответствующем заголовке, он выполняет Q_DECLARE_FLAGS (OPENMODE, OPENMODEFLAG) [/code]), если нет, я понятия не имею, откуда он будет.find_package(QuaZip5 REQUIRED) < /code> и < /p> target_link_libraries(${EXECUTABLE_NAME} PRIVATE quazip1-qt5) target_include_directories(${EXECUTABLE_NAME} PRIVATE ${QUAZIP_INCLUDE_DIRS})