Open koxu1996 opened 1 year ago
I was getting unresolved reference error:
/usr/bin/ld: minidump_writer.o: in function `(anonymous namespace)::MinidumpWriter::FillRawModule(google_breakpad::MappingInfo const&, bool, unsigned int, MDRawModule*, unsigned char const*)':
/tmp/MEGAsync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:651: undefined reference to `google_breakpad::PEFile::TryGetDebugInfo(char const*, google_breakpad::_RSDS_DEBUG_FORMAT*)'
It was just matter of inculding new pe_file.cc in qmake - https://github.com/meganz/MEGAsync/pull/801/commits/588101ded286aea0b1ff39053ae969663f0fda71:
--- a/src/MEGASync/google_breakpad/google_breakpad.pri
+++ b/src/MEGASync/google_breakpad/google_breakpad.pri
@@ -31,6 +31,7 @@ unix:!macx {
SOURCES += $$PWD/client/linux/handler/exception_handler.cc
SOURCES += $$PWD/client/linux/handler/minidump_descriptor.cc
SOURCES += $$PWD/client/linux/minidump_writer/minidump_writer.cc
+ SOURCES += $$PWD/client/linux/minidump_writer/pe_file.cc
SOURCES += $$PWD/client/linux/minidump_writer/linux_dumper.cc
SOURCES += $$PWD/client/linux/minidump_writer/linux_ptrace_dumper.cc
SOURCES += $$PWD/client/linux/log/log.cc
Note, I also had some issues with freeimage library and its neon optimizations. I found out they should be disabled for ARM, however it seems to be already done in mega's SDK:
# freeimage's LibPNG has a problem with deciding to use neon on 64 bit arm, resulting in a missing symbol
if [ "$ARCH" == "aarch64" -o "$ARCH" == "arm64" ]; then
export CFLAGS="$CFLAGS -DPNG_ARM_NEON_OPT=0"
fi
With that I was able to build everything:
$ cd /tmp/megasync/src/
$ ./configure -g -q -i
$ qmake MEGASync/MEGASync.pro
$ lrelease MEGASync/MEGASync.pro
$ make
It works on Asahi Linux with M2 :heart:
I am sharing compiled binary with you: megasync_v4.9.3_aarch64, virus total scan here.
Hi Thanks for your concern about fixing this problem. I'm using aarch64 and I want to compile it. I encounterd the breakpad issue and I tried your solotuion step by step. But now I get the following error while compiling.
I'd appreciate it if you could take a look and help.
root@Falkenstein:/tmp/megasync/src# make Makefile:4343: warning: overriding recipe for target 'qrc_Resources_linux.cpp' Makefile:3010: warning: ignoring old recipe for target 'qrc_Resources_linux.cpp' Makefile:5676: warning: overriding recipe for target 'qrc_Resources_linux.cpp' Makefile:4343: warning: ignoring old recipe for target 'qrc_Resources_linux.cpp' Makefile:7009: warning: overriding recipe for target 'qrc_Resources_linux.cpp' Makefile:5676: warning: ignoring old recipe for target 'qrc_Resources_linux.cpp' g++ -Wl,-O1 -Wl,-rpath-link,/usr/lib/aarch64-linux-gnu -o megasync SettingsDialog.o BalloonToolTip.o BlurredShadowEffect.o ButtonIconManager.o LowDiskSpaceDialog.o DateTimeFormatter.o EventHelper.o InfoDialog.o MegaDelegateHoverManager.o NotificationsSettings.o OverQuotaDialog.o ScanningWidget.o QtPositioningBugFixer.o PasswordLineEdit.o SetupWizard.o UploadToMegaDialog.o PasteMegaLinksDialog.o ImportMegaLinksDialog.o ImportListWidgetItem.o CrashReportDialog.o MultiQFileDialog.o MegaProxyStyle.o AccountDetailsDialog.o DownloadFromMegaDialog.o ChangeLogDialog.o GuestWidget.o StreamingFromMegaDialog.o MegaProgressCustomDialog.o UpgradeDialog.o PlanWidget.o InfoWizard.o QMegaMessageBox.o AvatarWidget.o MenuItemAction.o AddExclusionDialog.o StatusInfo.o ChangePassword.o PSAwidget.o ElidedLabel.o UpgradeOverStorage.o Login2FA.o QRWidget.o CircularUsageProgressBar.o HighDpiResize.o AlertItem.o QAlertsModel.o MegaAlertDelegate.o QFilterAlertsModel.o FilterAlertWidget.o AlertFilterType.o BugReportDialog.o VerifyLockMessage.o MegaInfoMessage.o WaitingSpinnerWidget.o ProxySettings.o BandwidthSettings.o SwitchButton.o GuiUtilities.o CancelConfirmWidget.o NodeNameSetterDialog.o NewFolderDialog.o RenameNodeDialog.o NodeSelectorDelegates.o NodeSelectorProxyModel.o NodeSelectorModel.o NodeSelectorModelSpecialised.o NodeSelectorModelItem.o NodeSelectorTreeView.o NodeSelectorTreeViewWidget.o NodeSelectorTreeViewWidgetSpecializations.o NodeSelector.o NodeSelectorLoadingDelegate.o SearchLineEdit.o NodeSelectorSpecializations.o LockedPopOver.o PermissionsDialog.o PermissionsWidget.o attrmap.o backofftimer.o base64.o command.o commands.o db.o gfx.o file.o fileattributefetch.o filefingerprint.o filesystem.o http.o json.o megaclient.o node.o pubkeyaction.o request.o serialize64.o nodemanager.o setandelement.o share.o sharenodekeys.o sync.o transfer.o transferslot.o treeproc.o user.o useralerts.o utils.o logging.o waiterbase.o proxy.o pendingcontactrequest.o textchat.o cryptopp.o sodium.o sqlite.o external.o mega_utf8proc.o mega_ccronexpr.o mega_evt_tls.o mega_zxcvbn.o mediafileattribute.o raid.o testhooks.o heartbeats.o megaapi.o megaapi_impl.o QTMegaRequestListener.o QTMegaTransferListener.o QTMegaGlobalListener.o QTMegaListener.o QTMegaEvent.o mega_http_parser.o net.o fs.o waiter.o posixthread.o freeimage.o drivenotify.o drivenotifyposix.o HTTPServer.o DialogOpener.o DownloadQueueController.o Preferences.o LinkProcessor.o MegaUploader.o TransferRemainingTime.o UpdateTask.o EncryptedSettings.o CrashHandler.o ExportProcessor.o UserAttributesManager.o Utilities.o ThreadPool.o MegaDownloader.o MegaSyncLogger.o ConnectivityChecker.o TransferBatch.o TextDecorator.o qrcodegen.o TransfersModel.o DuplicatedNodeDialog.o DuplicatedNodeInfo.o DuplicatedNodeItem.o DuplicatedUploadChecker.o InfoDialogTransferLoadingItem.o InfoDialogTransfersProxyModel.o TransfersManagerSortFilterProxyModel.o TransferMetaData.o InfoDialogTransferDelegateWidget.o InfoDialogTransfersWidget.o MegaTransferDelegate.o MegaTransferView.o TransferBaseDelegateWidget.o TransferItem.o TransferManager.o TransferManagerDelegateWidget.o TransferManagerLoadingItem.o TransfersStatusWidget.o TransfersSummaryWidget.o TransferScanCancelUi.o TransferWidgetHeaderItem.o TransfersWidget.o DesktopNotifications.o TransferNotificationBuilder.o NotificatorBase.o NotificationDelayer.o Notificator.o AddBackupDialog.o BackupNameConflictDialog.o BackupRenameWidget.o BackupTableView.o BackupTableViewTooltips.o BackupsWizard.o RemoveBackupDialog.o SyncTooltipCreator.o SyncsMenu.o BindFolderDialog.o FolderBinder.o SyncTableView.o SyncTableViewTooltips.o BackupItemModel.o SyncItemModel.o SyncInfo.o SyncController.o SyncSettings.o AbstractPlatform.o Platform.o ShellNotifier.o PlatformImplementation.o ExtServer.o NotifyServer.o PowerOptions.o PlatformStrings.o crash_generation_client.o exception_handler.o minidump_descriptor.o minidump_writer.o pe_file.o linux_dumper.o linux_ptrace_dumper.o log.o minidump_file_writer.o linux_libc_support.o file_id.o memory_mapped_file.o safe_readlink.o guid_creator.o elfutils.o string_conversion.o convert_UTF.o qtlockedfile.o qtlockedfile_unix.o main.o MegaApplication.o TransferQuota.o UserAlertTimedClustering.o ScaleFactorManager.o CommonMessages.o ScanStageController.o EventUpdater.o FolderTransferListener.o BlockingStageProgressController.o Avatar.o CameraUploadFolder.o DeviceName.o FullName.o MyBackupsHandle.o MyChatFilesFolder.o qrc_Resources_linux.o moc_SettingsDialog.o moc_AutoResizeStackedWidget.o moc_BalloonToolTip.o moc_ButtonIconManager.o moc_DateTimeFormatter.o moc_LowDiskSpaceDialog.o moc_EventHelper.o moc_InfoDialog.o moc_MegaDelegateHoverManager.o moc_MegaNodeNames.o moc_NotificationsSettings.o moc_OverQuotaDialog.o moc_ScanningWidget.o moc_QtPositioningBugFixer.o moc_PasswordLineEdit.o moc_SetupWizard.o moc_UploadToMegaDialog.o moc_PasteMegaLinksDialog.o moc_ImportMegaLinksDialog.o moc_ImportListWidgetItem.o moc_CrashReportDialog.o moc_MultiQFileDialog.o moc_MegaProxyStyle.o moc_AccountDetailsDialog.o moc_DownloadFromMegaDialog.o moc_ChangeLogDialog.o moc_GuestWidget.o moc_StreamingFromMegaDialog.o moc_MegaProgressCustomDialog.o moc_UpgradeDialog.o moc_PlanWidget.o moc_InfoWizard.o moc_AvatarWidget.o moc_AddExclusionDialog.o moc_StatusInfo.o moc_PSAwidget.o moc_ElidedLabel.o moc_UpgradeOverStorage.o moc_ChangePassword.o moc_Login2FA.o moc_QRWidget.o moc_CircularUsageProgressBar.o moc_HighDpiResize.o moc_AlertItem.o moc_QAlertsModel.o moc_MegaAlertDelegate.o moc_QFilterAlertsModel.o moc_FilterAlertWidget.o moc_AlertFilterType.o moc_BugReportDialog.o moc_VerifyLockMessage.o moc_ViewLoadingScene.o moc_MegaInfoMessage.o moc_WaitingSpinnerWidget.o moc_ProxySettings.o moc_BandwidthSettings.o moc_SwitchButton.o moc_CancelConfirmWidget.o moc_NodeNameSetterDialog.o moc_NewFolderDialog.o moc_RenameNodeDialog.o moc_NodeSelectorProxyModel.o moc_NodeSelectorModel.o moc_NodeSelectorModelSpecialised.o moc_NodeSelectorModelItem.o moc_NodeSelectorTreeView.o moc_NodeSelectorTreeViewWidget.o moc_NodeSelectorTreeViewWidgetSpecializations.o moc_NodeSelector.o moc_NodeSelectorLoadingDelegate.o moc_SearchLineEdit.o moc_NodeSelectorSpecializations.o moc_LockedPopOver.o moc_PermissionsDialog.o moc_PermissionsWidget.o moc_QTMegaRequestListener.o moc_QTMegaTransferListener.o moc_QTMegaGlobalListener.o moc_QTMegaListener.o moc_HTTPServer.o moc_DownloadQueueController.o moc_Preferences.o moc_LinkProcessor.o moc_MegaUploader.o moc_UpdateTask.o moc_EncryptedSettings.o moc_CrashHandler.o moc_ExportProcessor.o moc_UserAttributesManager.o moc_Utilities.o moc_MegaDownloader.o moc_MegaSyncLogger.o moc_ConnectivityChecker.o moc_TextDecorator.o moc_InfoDialogTransfersProxyModel.o moc_DuplicatedNodeDialog.o moc_DuplicatedNodeInfo.o moc_DuplicatedNodeItem.o moc_DuplicatedUploadChecker.o moc_InfoDialogTransferLoadingItem.o moc_TransfersManagerSortFilterProxyModel.o moc_TransfersSortFilterProxyBaseModel.o moc_TransfersModel.o moc_InfoDialogTransferDelegateWidget.o moc_InfoDialogTransfersWidget.o moc_MegaTransferDelegate.o moc_MegaTransferView.o moc_TransferBaseDelegateWidget.o moc_TransferManager.o moc_TransferManagerDelegateWidget.o moc_TransferManagerLoadingItem.o moc_TransfersStatusWidget.o moc_TransfersSummaryWidget.o moc_TransferScanCancelUi.o moc_TransferWidgetHeaderItem.o moc_TransfersWidget.o moc_DesktopNotifications.o moc_TransferNotificationBuilder.o moc_NotificatorBase.o moc_NotificationDelayer.o moc_Notificator.o moc_AddBackupDialog.o moc_BackupNameConflictDialog.o moc_BackupRenameWidget.o moc_BackupTableView.o moc_BackupTableViewTooltips.o moc_BackupsWizard.o moc_RemoveBackupDialog.o moc_SyncsMenu.o moc_BindFolderDialog.o moc_FolderBinder.o moc_SyncTableView.o moc_SyncTableViewTooltips.o moc_BackupItemModel.o moc_SyncItemModel.o moc_SyncController.o moc_SyncInfo.o moc_ShellNotifier.o moc_PlatformStrings.o moc_ExtServer.o moc_NotifyServer.o moc_MegaApplication.o moc_TransferQuota.o moc_UserAlertTimedClustering.o moc_ScanStageController.o moc_FolderTransferListener.o moc_BlockingStageProgressController.o moc_Avatar.o moc_CameraUploadFolder.o moc_DeviceName.o moc_FullName.o moc_MyBackupsHandle.o moc_MyChatFilesFolder.o -lstdc++fs /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libuv.a -lmediainfo -lzen -lraw -fopenmp -lavcodec -lavformat -lavutil -lswscale -lswresample /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libfreeimage.a -licuuc -licudata -lsqlite3 -lrt /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libcurl.a /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libz.a /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libcryptopp.a -lcares /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libsodium.a -ludev -lssl -lcrypto -ldl -lxcb /usr/lib/aarch64-linux-gnu/libQt5Svg.so /usr/lib/aarch64-linux-gnu/libQt5Widgets.so /usr/lib/aarch64-linux-gnu/libQt5X11Extras.so /usr/lib/aarch64-linux-gnu/libQt5Gui.so /usr/lib/aarch64-linux-gnu/libQt5Network.so /usr/lib/aarch64-linux-gnu/libQt5DBus.so /usr/lib/aarch64-linux-gnu/libQt5Core.so -lGL -lpthread /usr/bin/ld: /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libfreeimage.a(strenc.o): in function
StrIOEncInit':
strenc.c:(.text+0x13a8): warning: the use of tmpnam' is dangerous, better use
mkstemp'
/usr/bin/ld: exception_handler.o: in function google_breakpad::ExceptionHandler::SimulateSignalDelivery(int)': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/handler/exception_handler.cc:493: undefined reference to
breakpad_getcontext'
/usr/bin/ld: exception_handler.o: in function google_breakpad::ExceptionHandler::DoDump(int, void const*, unsigned long)': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/handler/exception_handler.cc:609: undefined reference to
google_breakpad::WriteMicrodump(int, void const, unsigned long, std::__cxx11::list<google_breakpad::MappingEntry, std::allocatorgoogle_breakpad::ExceptionHandler::WriteMinidump()': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/handler/exception_handler.cc:678: undefined reference to
breakpad_getcontext'
/usr/bin/ld: minidump_writer.o: in function (anonymous namespace)::MinidumpWriter::Init()': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:204: undefined reference to
google_breakpad::UContextReader::GetStackPointer(ucontext_t constCrashingThreadReferencesPrincipalMapping': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:205: undefined reference to
google_breakpad::UContextReader::GetInstructionPointer(ucontext_t const)'
/usr/bin/ld: minidump_writer.o: in function `(anonymous namespace)::MinidumpWriter::WriteThreadListStream(MDRawDirectory)':
/tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:495: undefined reference to google_breakpad::ThreadInfo::GetInstructionPointer() const' /usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:504: undefined reference to
google_breakpad::ThreadInfo::FillCPUContext(MDRawContextARM64_Old) const'
/usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:512: undefined reference to google_breakpad::ThreadInfo::GetInstructionPointer() const' /usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:426: undefined reference to
google_breakpad::UContextReader::GetStackPointer(ucontext_t const)'
/usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:427: undefined reference to google_breakpad::UContextReader::GetInstructionPointer(ucontext_t const*)' /usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:434: undefined reference to
google_breakpad::UContextReader::GetInstructionPointer(ucontext_t const)'
/usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:480: undefined reference to `google_breakpad::UContextReader::FillCPUContext(MDRawContextARM64_Old, ucontext_t const, fpsimd_context const)'
/usr/bin/ld: linux_ptrace_dumper.o: in function google_breakpad::LinuxPtraceDumper::ReadRegisterSet(google_breakpad::ThreadInfo*, int)': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/linux_ptrace_dumper.cc:159: undefined reference to
google_breakpad::ThreadInfo::GetGeneralPurposeRegisters(void*, unsigned long)'
/usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/linux_ptrace_dumper.cc:164: undefined reference to google_breakpad::ThreadInfo::GetFloatingPointRegisters(void**, unsigned long*)' /usr/bin/ld: /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libfreeimage.a(pngrutil.o): in function
png_read_filter_row':
pngrutil.c:(.text+0x69c4): undefined reference to png_init_filter_functions_neon' collect2: error: ld returned 1 exit status make: *** [Makefile:1446: megasync] Error 1
Despite following the provided steps I was not able to build on a up to date install of asahi linux due to the breakpad issue. This alternative removes the crashhandler to allow working builds and runs great on asahi: https://github.com/zarandya/megasync-nocrashhandler
@koxu1996 Any updates on this?
This PR updates Google Breakpad to the latest version.
It should close ARM related issues: https://github.com/meganz/MEGAsync/issues/303, https://github.com/meganz/MEGAsync/issues/310, https://github.com/meganz/MEGAsync/issues/456.
You can reproduce all changes with the following steps:
1. Prepare breakpad
2. Prepare lss
3. Clone MEGAsync repository
4. Update breakpad files - https://github.com/meganz/MEGAsync/pull/801/commits/2751244095bc78697b0a29a79233d64a17bedc10
5. Apply workaround for
inttypes.h has already been included before this header file, but without __STDC_FORMAT_MACROS defined
error - https://github.com/meganz/MEGAsync/pull/801/commits/fbbe423e8fd68c544f4da04544098a23761770bdI am not sure about this step, maybe
__STDC_FORMAT_MACROS
should be defined somewhere in megasync SDK :thinking: