Firebase unresolved external symbol

When I run my app in cocos2d, it prints the error:

2> Creating library C:\Users\Will\Documents\Projects\Home\proj.win32\Debug.win32\Home.lib and object C:\Users\Will\Documents\Projects\Home\proj.win32\Debug.win32\Home.exp 2>AppDelegate.obj : error LNK2001: unresolved external symbol "void * firebase::g_admob_initializer" (?g_admob_initializer@firebase@@3PAXA) 2>C:\Users\Will\Documents\Projects\Home\proj.win32\Debug.win32\Home.exe : fatal error LNK1120: 1 unresolved externals ========== Build: 1 succeeded, 1 failed, 4 up-to-date, 0 skipped ==========

I have no idea why. My app is literally the default cocos2d app, with the addition of the information in the firebase tutorial. All I did was include firebase\admob.h and it causes the error. It doesn’t cause the error when I include firebase\app.h for some reason.

cocos2d verison: 3.15.1

NDK: v15

SDK: 26.0.0

It’s saying unresolved external symbol, so I’m guessing that it has something to do with linking, but in my Android.mk, I link it.

app\jni\Android.mk

LOCAL_PATH := $(call my-dir)

# The path to the Firebase C++ SDK, in the project's root directory.
FIREBASE_CPP_SDK_DIR := ../../../firebase_cpp_sdk

APP_ABI := armeabi-v7a x86
STL := $(firstword $(subst _, ,$(APP_STL)))
FIREBASE_LIBRARY_PATH := $(FIREBASE_CPP_SDK_DIR)/libs/android/$(TARGET_ARCH_ABI)/$(STL)

include $(CLEAR_VARS)
LOCAL_MODULE := firebase_app
LOCAL_SRC_FILES := $(FIREBASE_LIBRARY_PATH)/libapp.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(FIREBASE_CPP_SDK_DIR)/include
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := firebase_admob
LOCAL_SRC_FILES := $(FIREBASE_LIBRARY_PATH)/libadmob.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(FIREBASE_CPP_SDK_DIR)/include
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)

$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/cocos)
$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/cocos/audio/include)

LOCAL_MODULE := MyGame_shared
LOCAL_MODULE_FILENAME := libMyGame

LOCAL_SRC_FILES := hellocpp/main.cpp \
			   ../../../Classes/AppDelegate.cpp \
			   ../../../Classes/HelloWorldScene.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../Classes

# _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END

LOCAL_STATIC_LIBRARIES := cocos2dx_static
LOCAL_STATIC_LIBRARIES += firebase_app
LOCAL_STATIC_LIBRARIES += firebase_admob

# _COCOS_LIB_ANDROID_BEGIN
# _COCOS_LIB_ANDROID_END

include $(BUILD_SHARED_LIBRARY)

$(call import-module,.)

# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END

build.gradle

import org.apache.tools.ant.taskdefs.condition.Os

apply plugin: 'com.android.application'

android {
	compileSdkVersion 22
	buildToolsVersion "25.0.0"

	defaultConfig {
		applicationId "com.call.home"
		minSdkVersion 14
		targetSdkVersion PROP_TARGET_SDK_VERSION
		versionCode 1
		versionName "1.0"

		externalNativeBuild {
			ndkBuild {
				if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo('none') != 0) {
					// skip the NDK Build step if PROP_NDK_MODE is none
					targets 'MyGame'
					arguments 'NDK_TOOLCHAIN_VERSION=4.9'
					arguments 'APP_PLATFORM=android-'+PROP_TARGET_SDK_VERSION
                
					def module_paths = [project.file("../../cocos2d").absolutePath,
										project.file("../../cocos2d/cocos").absolutePath,
										project.file("../../cocos2d/external").absolutePath]
					if (Os.isFamily(Os.FAMILY_WINDOWS)) {
						// should use '/'
						module_paths = module_paths.collect {it.replaceAll('\\\\', '/')}
						arguments 'NDK_MODULE_PATH=' + module_paths.join(";")
					}
					else {
						arguments 'NDK_MODULE_PATH=' + module_paths.join(':')
					}
                
					arguments '-j' + Runtime.runtime.availableProcessors()
					abiFilters.addAll(PROP_APP_ABI.split(':').collect{it as String})
				}
			}
		}
	}

	sourceSets.main {
		java.srcDir "src"
		res.srcDir "res"
		manifest.srcFile "AndroidManifest.xml"
		assets.srcDir "../../Resources"
	}

	externalNativeBuild {
		ndkBuild {
			if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo('none') != 0) {
				// skip the NDK Build step if PROP_NDK_MODE is none
				path "jni/Android.mk"
			}
		}
	}

	signingConfigs {

	   release {
			if (project.hasProperty("RELEASE_STORE_FILE")) {
				storeFile file(RELEASE_STORE_FILE)
				storePassword RELEASE_STORE_PASSWORD
				keyAlias RELEASE_KEY_ALIAS
				keyPassword RELEASE_KEY_PASSWORD
			}
		}
	}

	buildTypes {
		release {
			minifyEnabled false
			proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
			if (project.hasProperty("RELEASE_STORE_FILE")) {
				signingConfig signingConfigs.release
			}

			externalNativeBuild {
				ndkBuild {
					arguments 'NDK_DEBUG=0'
				}
			}
		}

		debug {
			externalNativeBuild {
				ndkBuild {
					arguments 'NDK_DEBUG=1'
				}
			}
		}
	}
}

dependencies {
	compile fileTree(dir: 'libs', include: ['*.jar'])
	compile project(':libcocos2dx')
	compile 'com.google.firebase:firebase-ads:11.4.0'
}

apply plugin: 'com.google.gms.google-services'

Just to note, this is only in Visual Studio. Compiling it in command prompt or Android Studio doesn’t create this problem.

Also noting, when I remove the line that says FIREBASE_APP_REGISTER_CALLBACKS_REFERENCE(admob)
from the admob.h file, it works. However, I’m worried that it’d screw something up down the line so I’ll hold of on that solution.

I think the firebase admob should only work with mobile platform such as iOS and Android, u need to put your code under

CC_PLATOFMR_IOS and CC_PLATOFMR_ANDROID.

What’s weird is that it has worked before, this is the only time it has not. I thought that it just only shows ads when it was on moblie, but you could still debug on Windows without it showing any ads. Also, Visual Studio is my main IDE and I’m used to that because it’s so easy, I don’t suppose there is any way I can debug for Android in Visual Studio, is there? I mean, I can’t say I totally don’t know why it’s doing this. Firebase Admob is a mobile thing, and all of the setup takes place in the proj.android-studio file. In Visual Studio, I’m debugging for windows, probably why it ignores all of the setup that I have in the android files and also why when I debug in Android Studio or compile for android in command prompt. However, it worked before without problems. I’ve always thought it would just not do anything in Windows instead of showing an error.