Я хочу отладить собственный исходный код Android, поэтому я изменяю уровень оптимизации clang -Os
-> -O0
ошибка:
frameworks / native / services / surfaceflinger / DisplayHardware / HWComposer_hwc1.h: 171: ошибка: неопределенная ссылка на «vtable for android :: HWComposer :: HWCLayerInterface» предварительно создает / gcc / linux-x86 / aarch64 / aarch64-linux-android-4.9 / aarch64-linux-android / bin / ld.gold:Символ vtable может быть неопределенным, поскольку в классе отсутствует ключевая функция (см. go / missingkeymethod) frameworks / native / services / surfaceflinger / DisplayHardware / HWComposer_hwc1.h: 171: ошибка: неопределенная ссылка на vtable для android :: HWComposer :: HWCLayerInterface'prebuilts / gcc / linux-x86 / aarch64 / aarch64-linux-android-4.9 / aarch64-linux-android / bin / ld.gold: символ vtable может быть неопределенным, поскольку в классе отсутствует ключевая функция (см. go / missingkeymethod).) frameworks / native / services / surfaceflinger / DisplayHardware / HWComposer_hwc1.h: 171: ошибка: неопределенная ссылка на 'vtable для android :: HWComposer ::Предварительная сборка HWCLayerInterface '/ gcc / linux-x86 / aarch64 / aarch64-linux-android-4.9 / aarch64-linux-android / bin / ld.gold: символ vtable может быть неопределенным, поскольку в классе отсутствует его ключевая функция (см. Go /отсутствующий метод) frameworks / native / services / surfaceflinger / DisplayHardware / HWComposer_hwc1.h: 171: ошибка: неопределенная ссылка на 'vtable для android :: HWComposer :: HWCLayerInterface' prebuilts / gcc / linux-x86 / aarch64 / aarch64-linux-android- android-4.9 / aarch64-linux-android / bin / ld.gold: символ vtable может быть неопределенным, поскольку в классе отсутствует ключевая функция (см. Go / missingkeymethod) out / target / product / rk3399_box / obj / SHARED_LIBRARIES / libsurfaceflinger_intermediates / DisplayHardware /HWComposer_hwc1.o: frameworks / native / services / surfaceflinger / DisplayHardware / HWComposer_hwc1.cpp: vtable для android :: Iterable: ошибка: неопределенная ссылка на «android :: HWComposer :: HWCLayerInterface :: setDataspace (целевой продукт / android_dataspace)» // rk3399_box / объект / SHARED_LIBRARIES / libsurfaceflinger_intermediates / ДИСПЛЕЙyHardware / HWComposer_hwc1.o: frameworks / native / services / surfaceflinger / DisplayHardware / HWComposer_hwc1.cpp: vtable для android :: HWComposer :: HWCLayer: ошибка: неопределенная ссылка на 'android :: HWComposer :: HWCLayerInatas_Direct_Directory>clang ++: ошибка: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v для просмотра вызова)
Я не хочу изменять исходный код Android, но хочу закрыть оптимизацию.
HWCLayerInterface:
class HWCLayerInterface {
protected:
virtual ~HWCLayerInterface() { }
public:
virtual int32_t getCompositionType() const = 0;
virtual uint32_t getHints() const = 0;
virtual sp<Fence> getAndResetReleaseFence() = 0;
virtual void setDefaultState() = 0;
virtual void setSkip(bool skip) = 0;
virtual void setIsCursorLayerHint(bool isCursor = true) = 0;
virtual void setBlending(uint32_t blending) = 0;
virtual void setTransform(uint32_t transform) = 0;
virtual void setFrame(const Rect& frame) = 0;
virtual void setCrop(const FloatRect& crop) = 0;
virtual void setVisibleRegionScreen(const Region& reg) = 0;
virtual void setSurfaceDamage(const Region& reg) = 0;
virtual void setSidebandStream(const sp<NativeHandle>& stream) = 0;
virtual void setBuffer(const sp<GraphicBuffer>& buffer) = 0;
virtual void setAcquireFenceFd(int fenceFd) = 0;
virtual void setPlaneAlpha(uint8_t alpha) = 0;
virtual void onDisplayed() = 0;
virtual void setDataspace(android_dataspace_t dataspace);
};
HWCLayer:
class HWCLayer : public HWCLayerInterface {
friend class LayerListIterator;
// select the layer at the given index
virtual status_t setLayer(size_t index) = 0;
virtual HWCLayer* dup() = 0;
static HWCLayer* copy(HWCLayer *rhs) {
return rhs ? rhs->dup() : NULL;
}
protected:
virtual ~HWCLayer() { }
};
Итерируемый:
template<typename CONCRETE, typename HWCTYPE>
class Iterable : public HWComposer::HWCLayer {
protected:
HWCTYPE* const mLayerList;
HWCTYPE* mCurrentLayer;
Iterable(HWCTYPE* layer) : mLayerList(layer), mCurrentLayer(layer),
mIndex(0) { }
inline HWCTYPE const * getLayer() const { return mCurrentLayer; }
inline HWCTYPE* getLayer() { return mCurrentLayer; }
virtual ~Iterable() { }
size_t mIndex;
private:
// returns a copy of ourselves
virtual HWComposer::HWCLayer* dup() {
return new CONCRETE( static_cast<const CONCRETE&>(*this) );
}
virtual status_t setLayer(size_t index) {
mIndex = index;
mCurrentLayer = &mLayerList[index];
return NO_ERROR;
}
};
HWCLayerVersion1:
class HWCLayerVersion1 : public Iterable<HWCLayerVersion1, hwc_layer_1_t> {
struct hwc_composer_device_1* mHwc;
public:
......
virtual void setDataspace(android_dataspace_t dataspace) {
getLayer()->reserved[0] = dataspace & 0xFF;
getLayer()->reserved[1] = (dataspace >> 8) & 0xFF;
getLayer()->reserved[2] = (dataspace >> 16) & 0xFF;
getLayer()->reserved[3] = (dataspace >> 24) & 0xFF;
}
}
Когда я изменяюсьуровень оптимизации до -O2
или:
class HWCLayerInterface {
protected:
virtual ~HWCLayerInterface() { }
public:
virtual int32_t getCompositionType() const = 0;
virtual uint32_t getHints() const = 0;
virtual sp<Fence> getAndResetReleaseFence() = 0;
virtual void setDefaultState() = 0;
virtual void setSkip(bool skip) = 0;
virtual void setIsCursorLayerHint(bool isCursor = true) = 0;
virtual void setBlending(uint32_t blending) = 0;
virtual void setTransform(uint32_t transform) = 0;
virtual void setFrame(const Rect& frame) = 0;
virtual void setCrop(const FloatRect& crop) = 0;
virtual void setVisibleRegionScreen(const Region& reg) = 0;
virtual void setSurfaceDamage(const Region& reg) = 0;
virtual void setSidebandStream(const sp<NativeHandle>& stream) = 0;
virtual void setBuffer(const sp<GraphicBuffer>& buffer) = 0;
virtual void setAcquireFenceFd(int fenceFd) = 0;
virtual void setPlaneAlpha(uint8_t alpha) = 0;
virtual void onDisplayed() = 0;
//change to default implemented
virtual void setDataspace(android_dataspace_t dataspace) = 0;
};
Эта ошибка не существует.