我在Android JNI C函数中有一个变量定义,该变量定义除了将自身定义为字符串外什么也不做。我希望此字符串出现在二进制文件中,但是当我构建项目时,.so文件不包含该字符串。
这就是我在C代码中尝试过的内容。
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_CreateEditAlertsWindow(object):
def setupUi(self, CreateEditAlertsWindow):
self.alerts_window_cancel_button = QtWidgets.QPushButton(CreateEditAlertsWindow)
self.alerts_window_cancel_button.setObjectName ("alerts_window_cancel_button")
self.horizontalLayout_2.addWidget(self.alerts_window_cancel_button)
# a bunch of other stuff
def retranslateUi(self, CreateEditAlertsWindow):
_translate = QtCore.QCoreApplication.translate
self.alerts_window_cancel_button.setText (_translate("CreateEditAlertsWindow", "Cancel"))
self.alerts_window_cancel_button.clicked.connect(self.closeWindow)
# a bunch more stuff
def closeWindow(self):
self.exit()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
CreateEditAlertsWindow = QtWidgets.QDialog()
ui = Ui_CreateEditAlertsWindow()
ui.setupUi(CreateEditAlertsWindow)
CreateEditAlertsWindow.show()
sys.exit(app.exec_())
如何使编译器无法优化未使用的变量定义?
答案 0 :(得分:0)
我怀疑您的问题不是与编译有关,而是与链接有关。链接器通常会删除不使用的数据,以减小二进制文件的大小。要检查这一点,请在C文件生成的strings
文件上使用.o
命令或等效命令:如果字符串在其中,但不在.so
中,则问题在于链接。
不幸的是,我不知道如何使用链接器命令解决此问题,因为我所有的Android C编程都是通过独立的工具链和自定义构建系统完成的。
您最简单的解决方案就是在运行时复制字符串。