У меня есть следующая проблема:Propagate определяет на другой Исходный_файл или установить флаг компилятора в targetlink
В рамках нашей (собственная) тестовой среды, мы используем C
для отображения разработанного C-кода для Simulink/targetlink поэтому мы может скомпилировать его как S-функцию. Все это скомпилировано с помощью visual-c (++) 2010
В коде разработки есть функция, доступная только тогда, когда определенный флаг/определение задается с помощью #ifdef
(поскольку это функция, которая дает тестер внутреннего доступа к некоторым данным, которые не должны быть доступны в производственном коде).
- Я попытался поднять флаг -DFLAGNAME в параметрах targetlink. Это не помогает.
- Я использовал
#define FLAGNAME
в моем картографическом коде, это помогло до сих пор, что предупреждение об неизвестной функции исчезло (так что файл заголовка принял флаг), но я все еще получаю сообщение об ошибке во время ссылки, что он не может разрешить внешний символ
Я не могу понять, как получить доступ к функции без изменения кода разработки. Ниже я попытаюсь дать пример:
dev.h
#ifdef FLAGNAME
int* access(void);
#endif
dev.c
#include "dev.h"
#ifdef FLAGNAME
int* access(void){
return &data; //data has filescope
}
#endif
customCode.c (отображение кода из targetlink)
#define FLAGNAME
#include "dev.h"
int main()
{
int* bar = access();
// do other things
}
У меня есть доступ ко всем другим функциям в dev.c, и конкретная ошибка:
customCode.obj : error LNK2019: unresolved external symbol access referenced in function main
Редактировать: Я нашел пакет, в котором параметры компиляции сохранены и изменены соответствующим образом, это более или менее было решением проблемы. Но вопрос еще в том, можно ли распространить определение на другой исходный файл, потому что это сделает переносимое решение.
Вы компилируете 'dev.c' с' -DFLAGNAME'? Ошибка привязки настоятельно указывает на то, что вы этого не сделали. В общем случае такие флаги для условной компиляции должны быть установлены глобально. – StoryTeller
@StoryTeller Поскольку у меня нет прямого доступа к компилятору (только через targetlink), единственная возможность предоставить параметр компиляции - это окно опции в целевой ссылке. Там опция дается, как указано.Проблема может заключаться в том, что сборка S-Function (которая находится в другом окне) может не использовать эти параметры, но я не знаю, как заставить ее использовать какие-либо параметры вообще. –
@StoryTeller Я только что вспомнил, что есть пакетный скрипт где-то в целевой ссылке. Я посмотрю на него и, возможно, найду что-нибудь там. –